我需要在所有其他服务中使用公共服务。公共服务将仅启动一次。
让我们说共同的服务是 -
export Class CommonService
{
_commonVar1= "";
_commonVar2= "";
}
现在所有其他服务都需要公共服务的实例。请记住 - 公共服务将仅启动一次。
答案 0 :(得分:2)
如果将服务放入providers数组中,它们只会被实例化一次。他们基本上是单身人士。您可以在app模块中注册服务。
providers: [ArticleService, Category1Service, Category2Service],
在下一步中,我们将在类声明之上使用@Injectable()装饰器让角度知道可以注入类。
然后使用@Inject()将以下服务注入另一个服务,如下例所示。
import { Injectable, Inject } from '@angular/core';
@Injectable()
export class ArticleService {
public name: string;
constructor() {
this.name = "Awesome article";
};
}
@Injectable()
export class Category1Service {
constructor(@Inject(ArticleService) public articleService: ArticleService) { }
}
@Injectable()
export class Category2Service {
constructor(@Inject(ArticleService) public articleService: ArticleService) { }
}
因为我们的文章服务注册为单身人士,所以属实。
export class FooComponent {
constructor(
@Inject(ArticleService) private articleService: ArticleService,
@Inject(Category1Service) private category1Service: Category1Service,
@Inject(Category2Service) private category2Service: Category2Service,) {
// both will print "Awesome article"
console.log(category1Service.articleService.name);
console.log(category2Service.articleService.name);
// change name in article service
articleService.name = "Bad article";
// both will print "Bad article"
console.log(category1Service.articleService.name);
console.log(category2Service.articleService.name);
}
}