我正在使用angular2 / Typescript构建应用程序,并尝试访问作为依赖项注入的服务。在Angular 1.x中,我将通过控制器函数访问此服务,并且所有子函数都能够访问相同的依赖项。在这里,我通过我的组件的构造函数注入它,如下所示:
[StringLength(65)]
[Index("IX_FirstNameLastName", 1, IsUnique = true)]
public string FirstName { get; set; }
[StringLength(65)]
[Index("IX_FirstNameLastName", 2, IsUnique = true)]
public string LastName { get; set; }
其中rummyGame是我试图注入的服务。这是正常的。但是,在构造函数中访问此服务后,如何在其他函数中访问它?例如,我在组件中有以下单击功能,我想在rummyGame服务中调用一个方法:
constructor( @Inject(JRummy) rummyGame: JRummy) {
this.currentGame = new Game();
rummyGame.startGame(this.currentGame);
}
如果将rummyGame服务注入到构造函数中,它如何被注入到这个click函数中?在构造函数访问该服务后,是否需要在组件上创建一个属性来存储该服务的实例?
答案 0 :(得分:3)
较短的方法是将变量声明为private
,以便它可以在类的上下文(this
)中直接使用。
constructor( @Inject(JRummy) private rummyGame: JRummy) {
//code here
}
//do access service object by having this.rummyGame
simulateComputer():void {
this.rummyGame.computerPlaySolo();
}
其他的事情是你需要在你的服务类上设置@Injectable
装饰器,使其在其他组件构造函数中成为injectable
作为依赖。
答案 1 :(得分:1)
发现问题 - Pankaj的响应是正确的,但我没有将@Injectable()装饰器添加到服务本身的rummyGame.computerPlaySolo()方法中。似乎当在构造函数签名中使用@Inject声明直接从构造函数调用该方法时,它在没有@Injectable()装饰器的情况下工作,但是当我尝试在click函数中访问它时,它无法访问该函数没有@Injectable声明