使用$ resource和$ q初始化$ scope变量

时间:2015-07-04 10:22:02

标签: javascript angularjs angular-promise

我正在尝试使用从服务调用resource.query()并返回空的函数来初始化Angualr范围变量。

以下是我的代码

控制器

$scope.categories = _processedCategories($scope.excludedCategories);

// excluded categories is an array of objects
function _processedCategories(excludedCategories) {
    preDefinedCategoryService.rest.query({},
        function (data) {
            categories = _.filter(data._embedded.categories, function (n) {
                return (n.id !== excludedCategories.id);
            });    
            return categories
        },
        function () {
            console.log ('error');
        });    
   }

我将$ scope.categories变为空,但是当我$scope.categories = _.filter(..)时,它会直接填充它们。我知道它与$promise有关但是如何根据我的要求解决它?我想稍后再重复使用这个功能。

1 个答案:

答案 0 :(得分:1)

您无法从异步操作返回。使用Promise API提供在加载和处理数据时调用的回调:

_processedCategories($scope.excludedCategories).$promise.then(function(categories) {
    $scope.categories = categories;
});

// excluded categories is an array of objects
function _processedCategories(excludedCategories) {
    return preDefinedCategoryService.rest.query({}, function (data) {
        return categories = _.filter(data._embedded.categories, function (n) {
            return (n.id !== excludedCategories.id);
        });
    }, function () {
        console.log('error');
    });
}

注意,_processedCategories现在返回preDefinedCategoryService.rest.query函数调用的结果,它是promise对象。