我有像这样的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标记的服务是单身人士...这里发生了什么。
答案 0 :(得分:0)
好吧,之所以有多个类的实例,是因为我在不止一个地方使用providers:[MyService]
。
所以解决方法是致电:
providers:[MyService]
只需一次,如果你想让MyService成为一个单独的(你只想要该类的一个实例。最好让提供者在你的根模块中调用。
因此,您应该根据需要多次调用@Inject(MyService)
,这将在任何地方注入相同的单身。