将$ scope.users.length视为未定义

时间:2014-04-24 10:54:27

标签: angularjs

在getPagerLabel方法中我为$ scope.users.length定义了未定义,这是代码

    angular.module('myAppServices', ['ngResource'])
        .factory('Users', function($resource) {
            return $resource('/MY/system/users/grid');
        });

    function UsersCtrl($scope, Users) {
        $scope.pagerLabel = 'Showing 1 - 10 of 100';
        $scope.users = Users.get();
        getPagerLabel();

        function getPagerLabel() {
            ...
            var total = $scope.users.length;
            ...
            //$scope.pagerLabel = 'Showing ' + start + ' - ' + end + ' of ' + total;
        }

Users.get()像这样返回json数据

{"page":"1","total":"1","records":"3","rows":[{"loginId":1,"fullName":"Test User"},{"loginId":2,"fullName":"Some"},  {"loginId":3,"fullName":"TesterM"}],"expired":false}

2 个答案:

答案 0 :(得分:0)

这可能是因为Users.get()返回一个对象,而不是一个数组。您可以使用$scope.users.records$scope.users.rows.length

更新:如果以上操作无效,那么您可能会异常地获取导致问题的数据。您可以尝试使用$ q服务来创建承诺。 promise是一个可以按预期使用的对象,但是当异步调用返回时,实际数据将被填充。用它最简单的形式:

function getData(){
     var deferred = $q.defer();
     // async call, resolved after ajax request completes
     return deferred.promise;
};

getData().then(someOtherFunction);
//Angular also "understands" that it's a promise if you use it in a template like so
$scope.data = getData();

你可能想像其他人一样使用.then()。 您可以在此处阅读更多内容:http://liamkaufman.com/blog/2013/09/09/using-angularjs-promises/

答案 1 :(得分:0)

好的,这解决了问题

Users.get($scope.grid).$promise.then(function(result) {
            $scope.users = result;
            getPagerLabel();

        }, function(reason) {

        });