2015-03-13 75 views
0

我在我的控制器檢查一天,然後取決於它是什麼時間的功能,將我的對象的isOpen屬性切換爲true或false。我拉着這樣的對象angularJS訪問對象屬性在功能不工作

$http.get('js/data.json').success(function(data) { 
    $scope.locations = data; 
}); 

這裏是我試圖改變它的地方。 (我會省略我設置的變量以節省空間)

$scope.checkStatus = function($scope) { 


switch(day) { 
     case 0: $scope.locations[0].isOpen = false; 
       break; 
     case 1: 
     case 2: 
     case 3: 
     case 4: 
     case 5: if(time >= $730am && time < $9pm) { 
        $scope.locations[0].isOpen = true; 
       } else { 
        $scope.locations[0].isOpen = false; 
       }; 
       break; 
     case 6: if(time >= $11am && time < $9pm) { 
        $scope.locations[0].isOpen = true; 
       } else { 
        $scope.locations[0].isOpen = false; 
       }; 
       break; 
     default: alert("default"); 
}; 

switch(day) { 
     case 0: $scope.locations[0].isOpen = false; 
       break; 
     case 1: 
     case 2: 
     case 3: 
     case 4: 
     case 5: if(time >= $8am && time < $8pm) { 
        $scope.locations[1].isOpen = true; 
       } else { 
        $scope.locations[1].isOpen = false; 
       }; 
       break; 
     case 6: if(time >= $11am && time < $10pm) { 
        $scope.locations[1].isOpen = true; 
       } else { 
        $scope.locations[1].isOpen = false; 
       }; 
       break; 
     default: alert("default"); 
}; 

};

等等其餘的位置。

這給我錯誤「無法讀取未定義的屬性'位置」。但是,當我測試$ http.get成功函數中的$ scope.locations [0] .isOpen時,它正確顯示了我的屬性。

所以我真的有兩個問題:如何訪問checkStatus函數內的那個對象?這是做這件事的最好方法嗎?有沒有想過的一些更簡單的方法?

編輯:

我把它去除的checkStatus()函數,只是放置$ http.get成功函數內部的switch語句工作。它現在看起來像這樣。我不確定這是否是最佳做法,但似乎是功能性的。

myApp.controller('MyController', function MyController($scope, $window, $http) { 
    $http.get('js/data.json').success(function(data) { 
    $scope.locations = data; 

    // variables omitted to save space 


    switch(day) { 
     case 0: $scope.locations[0].isOpen = false; 
       break; 
     case 1: 
     case 2: 
     case 3: 
     case 4: 
     case 5: if(time >= $730am && time < $9pm) { 
        $scope.locations[0].isOpen = true; 
       } else { 
        $scope.locations[0].isOpen = false; 
       }; 
       break; 
     case 6: if(time >= $11am && time < $9pm) { 
        $scope.locations[0].isOpen = true; 
       } else { 
        $scope.locations[0].isOpen = false; 
       }; 
       break; 
     default: alert("default"); 
    } 
}); 

回答

0

我不認爲你需要的第二$scope這裏:

$scope.checkStatus = function($scope) { 

只是這樣做:

$scope.checkStatus = function() { 

這裏的竅門是正確的$scope在已定義這個功能的「範圍」。

+0

我曾經這樣做過,我添加了$ scope以查看是否可以修復它。 – user2407400 2015-03-13 16:42:49

+0

啊,我明白了。那麼你確定'$ scope'是在'$ http'成功後調用'$ scope.locations = data;'時定義的嗎? – 2015-03-13 16:47:32

0

檢查您從http請求中獲得的數據。你的錯誤說它找不到$ scope.location中的對象isOpen。請控制$ scope.locations來查看您的嵌套數組,然後修復您的代碼。我看不到你的JSON文件,所以沒有太多真的我可以做些什麼,但是嘗試這個

$scope.locations.isOpen = false; 

,以取代所有$scope.locations[0..1..2].isOpen = false;。如果不解決您的問題,那麼請複製粘貼數據你登錄了控制檯或json文件,所以我可以幫你。