控制器内的angular-ui-router函数不是函数

时间:2016-12-20 14:00:55

标签: javascript angularjs angular-ui-router angular-components

我在州内创建了一个控制器。我们通常使用这种符号表示我们的角度(1.5)组件和服务angular.extend(self, {})

我的问题是在初始化self.criteria时,浏览器调用self.getAgencies()并返回异常:

  

错误:self.getAgencies不是函数

(function (app) {
    'use strict';

    app.config(function ($stateProvider) {
        $stateProvider.state('app.invoice', {
            url: '/invoice'
            abstract: true,
            template: '<ui-view></ui-view>'
        })
        .state('app.invoice.list', {
            url: '/list?allMyParam',
            template: '<invoices criteria="$ctrl.criteria"></invoices>',
            controllerAs: '$ctrl',
            controller: function ($location) {
                var self = this;

                angular.extend(self,{
                    criteria: {
                        agencies: self.getAgencies()
                    },
                    getAgencies: function () {
                        if ($location.search().agencies) {
                            return undefined;
                        } else {
                            return ['foo', 'blah'];
                        }
                    }
                });
            }
        });
    });
})(angular.module('module', []));

我把getAgencies()函数放在条件原型初始化上,但它没有改变任何东西。

我在getAgencies()之外移动angular.extend(self, {})就是这样:

var self = this;

var getAgencies = function () {
    if ($location.search().agencies) {
        return undefined;
    } else {
        return ['foo', 'blah'];
    }
}

angular.extend(self, {
    criteria: {
        agencies: getAgencies()
    }
});

我的代码工作正常,但是我想了解为什么当控制器组件内的这个调用工作正常时我的self.getAgencies()无法工作,并且如果可以的话,让它更好。

我正在使用angular-ui-router 0.2.18,角度为1.5.0。 谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

因为何时达到此代码

A(8*(i-1)+j-1)  <= B(i-1)(7+8*(j-1) downto 8*(j-1));

还没有调用angular.extend函数,并且没有理由为self包含getAgencies函数。

为什么不在事后初始化代理商?

criteria: {
   agencies: self.getAgencies()
},

或者,您可以使用getter和post-pone调用函数:

            angular.extend(self,{
                criteria: { },
                getAgencies: function () {
                    if ($location.search().agencies) {
                        return undefined;
                    } else {
                        return ['foo', 'blah'];
                    }
                }
            });

            self.criteria.agencies = self.getAgencies();