函数中的 angularJS 访问对象属性不起作用
angularJS access object property in function not working
我的控制器中有一个函数,可以检查一天,然后根据时间将对象的isOpen属性切换为真或假。我像这样拉进了物体
$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() 函数并将 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");
}
});
我认为你不需要这里的第二个$scope
:
$scope.checkStatus = function($scope) {
只需这样做:
$scope.checkStatus = function() {
这里的诀窍是,正确的$scope
已经在此函数的"范围"中定义。
检查您从 http 请求中获取的数据。 您的错误说它找不到对象 is 在 $scope.location 中打开。请控制台 $scope.locations 以查看您的嵌套数组,然后修复您的代码。我看不到您的 json 文件,所以我对此无能为力,但请尝试用这个替换您的所有$scope.locations[0..1..2].isOpen = false;
$scope.locations.isOpen = false;
如果这不能解决您的问题,请复制粘贴您在控制台或 json 文件中记录的数据,以便我为您提供帮助。
相关文章:
- 如何从对象的原型方法访问JavaScript对象属性
- 如何将数组项添加到对象属性中
- 设置嵌套对象属性的更好方法
- JavaScript管理具有重复属性名称的对象属性
- 如何使用element.myobj.prop等具有对象属性的元素
- 如何使用(this)访问Angular 2 http rxjs catch函数中的对象属性
- Es6:能够在设置/更新/删除对象属性时调用自定义方法
- 如何在AngularJS工厂中正确声明对象属性
- 如何使用object.assign()从其他对象引用基本对象属性
- 使用XPath样式访问Javascript JSON对象属性
- 将javascript对象(属性+值)合并到一个对象中
- 数组:使对象属性成为数组键
- 无法从JavaScript中的函数调用对象属性
- Google Closure Advanced |无法识别对象属性|动态属性
- Javascript从匿名函数访问外部对象属性
- 从函数更改对象属性
- 如何从字符串变量访问对象属性
- 从嵌套对象属性中获取排除某个值的最高值
- 在Aurelia computeds中,当设置依赖关系时,如何声明对对象属性的依赖关系
- 传递数量不确定的可能嵌套的对象属性