角度指令工厂函数是否被调用作为函数的构造函数

时间:2014-11-07 15:55:33

标签: angularjs angularjs-directive

在Angular中,当向模块注册指令时,是使用new调用指令工厂函数还是仅使用简单的函数调用?

例如

var MyDirective = function() {
    return {
       link: function() { ... }
    };
}

module('myMod', []).directive('myDirective', MyDirective);

MyDirective是否在内部被调用为:

... = MyDirective();

... = new MyDirective();

2 个答案:

答案 0 :(得分:2)

Angular Guide on providers州:

  

前面我们提到过我们还有特殊用途的对象   是(...)是控制器,指令,过滤器和动画。

     

注射器创建这些特殊对象的说明   (Controller对象除外)使用Factory配方   在幕后。

compile.js source code中可以清楚地看到这一事实。因为我们知道Angular中的工厂配方只是通过$injector.invoke(fn)来调用函数(带有依赖关系),所以对你的问题的正确答案是... = MyDirective();

答案 1 :(得分:1)

使用$injector调用它,即$injector.invoke(MyDirective),以便可以解析和注入依赖项。在内部,$injector.invoke调用MyDirective()而不 new,并将依赖项作为参数传递。