AngularJS:指令内部的函数没有返回数据

AngularJS: Function inside directive is not returning data

本文关键字:返回 数据 函数 指令 内部 AngularJS      更新时间:2023-09-26

这是我的指令

angular.module('categoryListingDirective', []).directive('categoryListing', function (Category) {
    return {
        restrict: 'A',
        replace: true,
        require: true,
        scope: true,
        templateUrl: '../static/partials/categoryListingForm.html',
        link: function (scope, element, attrs) {
            var categories = undefined;
            var getCategories = function () {
                if (categories === undefined) {
                    categories = Category.query(function(){});
                }
                return categories;
            };
            var allParentCategories = function () {
                console.log('getting parent categories');
                return _.uniq(getCategories(), function (category) {
                    console.log('category:', category);
                    return category.parent;
                });
            };
            console.log('categories:', getCategories());
            console.log('allParentCategories:', allParentCategories());
        }
    }
});

当我尝试在浏览器上运行此命令时,我在console log

中看到以下内容
categories: 
[$promise: Object, $resolved: false]
 categoryListing.js:25
getting parent categories categoryListing.js:19
allParentCategories: [] 

我很确定这个不应该是空的

  • 是因为async性质的电话被解雇吗?
  • 我如何修复它,有什么建议?

感谢

Category资源看起来像

angular.module('categoryService', ['ngResource']).factory('Category', function($resource) {
  return $resource('categories/:categoryId', {categoryId: '@uuid'});
});

(标记为社区wiki,因为答案确实在评论中)

这可以帮助您理解处理$resource返回的承诺的方法:

var allParentCategories = function () {
    console.log('getting parent categories');
    var ret = [];
    getCategories.then(function(results){
        ret = _.uniq(results.data, function (category) {
            console.log('category:', category);
            return category.parent;
        });
    });
    return ret;
};

我知道它比直接返回_.uniq的结果更不漂亮,但这就是JS当前状态下的生活!