我的控制器中有一个函数检查当天,然后根据它的时间,将我的对象的isOpen属性切换为true或false。我像这样拉了对象
$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");
};
};
等等其他地方。
这给了我错误&#34;无法读取属性&#39;位置&#39;未定义的。&#34;但是,当我在$ http.get成功函数中测试$ scope.locations [0] .isOpen时,它正确显示了该属性。
所以我真的有两个问题:如何在checkStatus函数中访问该对象?这是最好的方法吗?我有没有想过的更简单的方法?
修改:
我通过删除checkStatus()函数并将switch语句放在$ http.get成功函数中来实现它。它现在看起来像这样。我不确定这是否是最佳做法,但它似乎是有效的。
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 :(得分:0)
我认为你不需要第二个$scope
:
$scope.checkStatus = function($scope) {
这样做:
$scope.checkStatus = function() {
这里的诀窍是,在此函数的“范围”中已经定义了正确的$scope
。
答案 1 :(得分:0)
检查您从http请求获得的数据。你的错误说它无法在$ scope.location中找到对象isOpen。请控制$ scope.locations以查看嵌套数组,然后修复代码。我看不到您的json文件,因此我无法理解它,但尝试用此替换所有$scope.locations[0..1..2].isOpen = false;
$scope.locations.isOpen = false;
如果这没有解决您的问题,请复制粘贴您在控制台或json文件中记录的数据,以便我可以帮助您解决问题。