Angular JS注入了新的类实例

时间:2012-11-29 06:06:03

标签: angularjs

我想注入一个类的实例。从这个线程看起来服务返回新的serviceArgFunction,这就是我想要的。 https://groups.google.com/forum/#!msg/angular/56sdORWEoqg/VxECXKbn3gsJ

但我似乎无法让它发挥作用。出于某种原因,我的两个共享状态实例。任何人都可以帮我弄清楚我做错了什么? http://jsfiddle.net/kTjMy/5/

var Klass = function() {
    this.count = 0;
    this.getAndIncCount = function() {
        this.count += 1;
        return this.count;
    };
};

app.service('service', Klass);

3 个答案:

答案 0 :(得分:17)

您可以使用返回类的构造函数的工厂:

app.factory('myKlass', function() {
  return Klass
});

更简单的是,如果Klass在其他地方定义,则可以使用value

app.value('myKlass', Klass);

无论哪种方式,都可以正常注射。

function CtrlA($scope, myKlass)
{
  new myKlass();
}

请参阅this jsFiddle

[编辑]另请参阅this Google Groups postthis associated example

答案 1 :(得分:4)

为了说清楚,我创建了a little Plunker

它有服务和工厂。 服务和工厂有价值和制定者和吸气剂。

两者都注入控制器A和B. 如果更改控制器A中的服务值,则此更改也会在控制器B中进行,因为该服务是单例。

但是当您在控制器B中更改工厂中的值时,这仅影响B,因为更改仅在B中创建的实例中进行。

享受!

答案 2 :(得分:0)

Maximilian - 谢谢你的好榜样。

我将它转换为JSFiddle,作为一个尝试我想深入研究的另一种设计模式的地方。 为什么将提供者类型从“服务”交换到“工厂”似乎仍然有效? 似乎更多的是关于如何创建提供者,即使用“新”而不是直接引用它。

此外,在服务中,是否存在关于服务应该实现“this”关键字的设计模式,而不是使用return {myAccessor:function(){return val; }}

请参阅 http://jsfiddle.net/jeffsteinmetz/XF69p/

在这个jsfiddle中,你可以改变代码的一行(第23行),它仍然可以工作,代码行可以是:

App.service('MyService', function() {

App.factory('MyService', function() {    

为什么这两种都有效?

似乎更多关于如何使用“new”

引用服务
  var myInstance = new MyFactory();

与直接调用它不同

  MyService.getVal()

任何有棱有角的人都会关注这背后的最佳实践和推理:

  • 何时使用'new'以及何时不需要新
  • 为什么使用'this'参考方法来定义您的提供者而不是return {accessorName:function}
  • 为什么工厂或服务都在上面的例子中工作?