Angular指令第二个参数,为什么它是一个函数?

时间:2014-06-25 20:27:00

标签: angularjs directive

这只是关于Angular指令的一般问题。为什么angular选择具有返回对象的函数而不仅仅直接将对象列为第二个参数?

换句话说,为什么它看起来像这样:

app.directive('helloWorld', function() {
  return {
    restrict: 'AE',
    replace: 'true',
    template: '<h3>Hello World!!</h3>'
  };
});

而不是这个:

app.directive('helloWorld',{
    restrict: 'AE',
    replace: 'true',
    template: '<h3>Hello World!!</h3>'
});

3 个答案:

答案 0 :(得分:5)

所以你可以注入依赖项

例如:

app.directive('helloWorld', function($rootScope) {
  return {
    restrict: 'AE',
    replace: 'true',
    template: '<h3>Hello World!!</h3>'
  };
});

angular会将$ rootScope注入你的指令。

答案 1 :(得分:2)

因为当您实例化一个指令时,您需要一个新的实例。该函数将为您实例化一个新对象,而不是返回相同的对象。

此外,该功能也可用于依赖注入。

答案 2 :(得分:2)

我认为这是为了允许依赖注入ex。

.directive('someDirective', ['$filter', function ($filter) {
    'use strict';

    return {
        restrict: 'A',
        require: 'ngModel',
        link: function (scope, element, attrs, ngModel) {

            });
        }
    };
}]);