2015-03-13 70 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文件,所以我可以帮你。