@Injectable服务似乎不是单身人士

时间:2018-01-08 02:47:01

标签: angular angular5

我有像这样的Angular服务:

@Injectable
export class MyService {

  foo = true;

  fireTheCallback(){
    assert(this.foo === true); // this is correct
    this.cb();   // this.cb is not defined
  }

}

我将该服务注入组件:

@Component({providers:[MyService]})
export class MyComponent {

 constructor(data: MyService){
     data.cb = v => {
        // attach this callback function to the service
     }
 }

}

创建服务后,我们调用fireTheCallback()但未定义this.cb。它的是一个不正当上下文绑定的问题,因为其他变量如foo被正确设置。问题似乎是服务被重新创建,因此this.cb值会丢失。

有谁知道为什么会这样?我认为@Injectable标记的服务是单身人士...这里发生了什么。

1 个答案:

答案 0 :(得分:0)

好吧,之所以有多个类的实例,是因为我在不止一个地方使用providers:[MyService]

所以解决方法是致电:

providers:[MyService]

只需一次,如果你想让MyService成为一个单独的(你只想要该类的一个实例。最好让提供者在你的根模块中调用。

因此,您应该根据需要多次调用@Inject(MyService),这将在任何地方注入相同的单身。