如何在angular4中创建整个应用程序的公共服务

时间:2017-11-28 11:16:39

标签: angular

我需要在所有其他服务中使用公共服务。公共服务将仅启动一次。

让我们说共同的服务是 -

export Class CommonService
{
     _commonVar1= "";
     _commonVar2= "";
}

现在所有其他服务都需要公共服务的实例。请记住 - 公共服务将仅启动一次。

1 个答案:

答案 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);    

    }
}