使用angularjs设置复选框时出错

时间:2015-10-10 07:37:47

标签: javascript angularjs

这是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;,这个错误的原因是什么?

2 个答案:

答案 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视图加载菜单后,将使用它重新渲染。