bra*_*kim 14 javascript design-patterns angularjs
这是我在创建AngularJS应用程序时一直在考虑的事情.当我第一次了解AngularJS工厂时,我认为它们的一个巧妙用法是创建并返回构造函数而不是普通对象,即:
app.factory("Foo", function() {
function Foo(bar, baz) {
this.bar = bar;
this.baz = baz;
...
}
Foo.prototype = {
constructor: Foo,
method1: function() { ... },
method2: function() { ... },
...,
methodn: function() { ... },
};
return Foo;
});
Run Code Online (Sandbox Code Playgroud)
然后,您可以将该功能注入您的控制器并调用它new
.我发现这美观和OOP-y,但现在我开始认为它实际上是一种反模式.问题是当它在AngularJS感知上下文中工作时它可以正常工作,但是一旦你想要从控制台调用构造函数,在Web Worker中使用它,或者在非工作中重用代码AngularJS应用程序,你开始不得不解决 AngularJS而不是它.我开始怀疑这种方法是否被误导,因为javascript中的函数似乎已经是"单身人士"并且似乎不需要任何帮助实例化.
我滥用AngularJS工厂了吗?使用暴露于全局范围的构造函数会更好吗?更一般地说,是否存在促使AngularJS工厂/服务/提供商在全球对象上使用的特定因素,反之亦然?
是!
工厂语法:module.factory('factoryName',function); 结果:当将factoryName声明为injectable参数时,将通过调用传递给module.factory的函数引用来提供返回的值.用法:用于返回一个'class'函数,然后可以用来创建实例.
资料来源:https://groups.google.com/forum/#! msg/ angular/ 56sdORWEoqg/ HuZsOsMvKv4J
以上链接也被用作Bart评论的来源:AngularJS:Service vs provider vs factory