Angular 2 - 创建从db中提取的全局变量

时间:2016-12-13 09:02:17

标签: angular

刚刚掌握Angular 2的细微差别,我正在尝试建立的一件事是创建可在任何组件中使用的网站范围变量的最佳实践。

我使用服务从数据库中提取变量。该服务有一个getVars()方法,该方法使用Http.get()方法提取数据。我的问题是,不是每次我需要变量时都使用该方法,我可以使用它一次并将其存储在常量变量(或类似)中,然后在需要时随时调用它。那会在根模块中吗?

1 个答案:

答案 0 :(得分:1)

要知道的是,Angular 2应用程序中的所有Injectable都是Singleton。您可以使用您的方法检索您的值(基本上在初始化时,检查APP_INITIALIZER),将其存储在对象的属性中,然后在您注入服务的任何位置检索它。这是配置服务的简短示例。

config.service.ts

@Injectable()
export class ConfigService {
    private _config: Object;
    private http: Http;

    constructor(private injector: Injector) {
    }

    get(optionName: any) {
        return this._config[optionName];
    }


    load() {
        this.http = this.injector.get(Http);

        let observable = this.http.get('dist/config/configuration.json')
            .map(res => res.json());

        observable.subscribe(config => this._config = config);
        return observable.toPromise();
    }
}

Providers数组

中的App.module.ts中
    ConfigService,
    {
        provide: APP_INITIALIZER,
        useFactory: (config: ConfigService) => () => config.load(),
        deps: [ConfigService],
        multi: true
    },

然后您可以将服务注入每个Component并直接使用configService.get访问变量(' yourVariable')