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

initialize $scope variable using $resource and $q

我正在尝试使用从服务调用 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 有关,但如何根据我的要求解决它?因为我以后也想重用这个功能。

您不能 return 从异步操作。使用 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 现在 return 是 preDefinedCategoryService.rest.query 函数调用的结果,它是承诺对象。