在Angular中,当向模块注册指令时,是使用new调用指令工厂函数还是仅使用简单的函数调用?
例如
var MyDirective = function() {
return {
link: function() { ... }
};
}
module('myMod', []).directive('myDirective', MyDirective);
MyDirective是否在内部被调用为:
... = MyDirective();
或
... = new MyDirective();
答案 0 :(得分:2)
前面我们提到过我们还有特殊用途的对象 是(...)是控制器,指令,过滤器和动画。
注射器创建这些特殊对象的说明 (Controller对象除外)使用Factory配方 在幕后。
在compile.js
source code中可以清楚地看到这一事实。因为我们知道Angular中的工厂配方只是通过$injector.invoke(fn)
来调用函数(带有依赖关系),所以对你的问题的正确答案是... = MyDirective();
答案 1 :(得分:1)
使用$injector
调用它,即$injector.invoke(MyDirective)
,以便可以解析和注入依赖项。在内部,$injector.invoke
调用MyDirective()
,而不 new
,并将依赖项作为参数传递。