在控制器中调用范围函数返回零值

时间:2017-06-25 08:25:53

标签: angularjs

我有这个功能,我在顶部称为loadAll()

function loadAll() {      
        UniversalService.GetAll()
            .then(function (a) {
                $scope.all = a;

            });
    }

当我在我的html中使用它时,我得到了正确的信息,但我稍后需要在我的控制器中对这些值进行分页,所以我称之为// get current page of items $scope.items = $scope.all.slice(vm.pager.startIndex, vm.pager.endIndex + 1);

但我没有得到任何价值。

2 个答案:

答案 0 :(得分:1)

您可以在此承诺解决之前致电此事吗? 在已解决的承诺中添加此内容可能是您的解决方案。

function loadAll() {      
        UniversalService.GetAll()
            .then(function (a) {
                $scope.all = a;
                $scope.items = $scope.all.slice(vm.pager.startIndex, vm.pager.endIndex + 1);
            });
    }

如果您不更改此功能,请使用回调:

    function loadAll(callback) {      
            UniversalService.GetAll()
                .then(function (a) {
                    $scope.all = a;
                    if (callback) {
                        callback();
                    }
                });
        }

并称之为:

loadAll(function() {
    $scope.items = $scope.all.slice(vm.pager.startIndex, vm.pager.endIndex + 1);
});

答案 1 :(得分:1)

  

是否有可能以其他方式解决承诺?我无法在$scope.items = $scope.all.slice(vm.pager.startIndex, vm.pager.endIndex + 1);函数中调用loadAll(),因为此行用于另一个函数

UniversalService.GetAll()返回承诺:

function loadAll() {      
    var promise = UniversalService.GetAll();
    promise.then(function (all) {
        $scope.all = all;
    });
    //RETURN promise
    return promise;
}

然后在另一个函数中使用该promise:

var loadAllPromise = loadAll();

function another(loadAllPromise) {
    loadAllPromise.then(function(all) {
        $scope.items = all.slice(vm.pager.startIndex, vm.pager.endIndex + 1);
    });
}