簡體   English   中英

AngularJS:指令內部的函數未返回數據

[英]AngularJS: Function inside directive is not returning data

這是我的指令

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日志中看到以下內容

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返回的promise的方式:

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返回結果_.uniq_.uniq在JS當前狀態下生存!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM