这是html:
<span ng-repeat="category in categories">
<label class="checkbox-inline" for="{{category.id}}">
<input type="checkbox" ng-checked="check(category.id)" ng-click="saveRoleMenu($event,category.id)" name="group" id="{{category.id}}" />
{{category.name}}
</label>
</span>
这是我的控制者:
//get all the menus
authorityService.getMenus().then(function(response) {
$scope.categories = response.data.data; //get all the menus success
})
//get the user's menus
var roleId = sessionStorage.getItem("roleId");
authorityService.getMenusByRoleId(roleId).then(function(response) {
$scope.userMenu = response.data.data; //get the user's menu success
})
$scope.saveRoleMenu = function($event, id) {
var checkbox = $event.target;
if (checkbox.checked) {
var roleId = $location.search().id;
authorityService.saveRoleMenu(roleId, id).then(function(response) {
if (response.data.code == 0) {
alert("success!");
}
})
}
}
$scope.check = function(value) {
//error caused here
for (var i = 0; i < $scope.userMenu.length; i++) {
if(value == $scope.userMenu[i].id){
return true;
}else{
return false;
}
}
}
我想设置复选框,如果$scope.userMenu
中的值,但在检查功能中,导致错误&#34;无法读取属性&#39;长度&#39;未定义&#34;,这个错误的原因是什么?
答案 0 :(得分:2)
Cannot read property 'length' of undefined
表示未定义$scope.userMenu
。 在为其指定值之前定义$ scope.userMenu。
$scope.userMenu = [];
var roleId = sessionStorage.getItem("roleId");
答案 1 :(得分:1)
这是因为您的userMenu
是从API加载的,check
函数在加载之前就已执行。
在这样的顶部定义userMenu
-
$scope.userMenu = [];
这会阻止check
抛出错误。从API视图加载菜单后,将使用它重新渲染。