Angular 5如何从资产加载全局变量

时间:2018-02-14 10:21:59

标签: javascript angular

在我的angular 5应用程序中,我需要加载一些全局变量,如主要Url和其他一些东西,我遵循这个例子: github

所以在app.component中使用此GET调用:

 ngOnInit() {
    this.http.get('assets/config.json')
      .map(res => res.json())
      .toPromise()
      .then((config) => {
        // do stuff with the config
        console.log(config)
      });
  }

我可以加载所有变量,但现在我不确定所有变量是否在应用程序周围需要之前加载。

有没有办法实现这个,或者其他一些加载全局变量的方法? 创建文件是一个很好的做法:global.ts来存储我的应用程序周围的所有变量吗?

2 个答案:

答案 0 :(得分:1)

  

有没有办法实现这一点,或者其他一些方式来加载全局   变量?创建文件是一个很好的做法:global.ts来存储   我的所有变量都在我的应用程序周围提供它?

是的! 创建一个名为globals.ts的文件

import { Injectable } from '@angular/core';

@Injectable()
export class Globals {
  anyVariable: string = 'test';
}

然后只需在当前组件中导入它即可访问它。

import { Globals } from './globals'

不要忘记在您的应用模块中添加依赖注入,如下所示

providers: [Globals]

您可以通过Angular依赖注入从App的任何位置访问Globals实体。

答案 1 :(得分:1)

拥有一组全局变量绝不是一个好主意,但......它在很大程度上取决于你的项目的情况。当我们讨论使用全局变量时,您和您的同事需要百分之百地确定您正在做什么 - 例如,确保您的变量不会由其他人改变状态,因为应用程序可能会崩溃。在这里你有wiki - 为什么全局变量是坏主意Global Variables Are Bad - C2 Wiki

让我们回到你的角度案例: 您可以轻松创建新的打字稿文件,您将拥有全局变量。请记住使用{ Injectable } from '@angular/core';装饰您的文件,而不是将其导入应用程序启动的位置import { GlobalAssets } from './globalAssets '。在提供商providers: [GlobalAssets ]中注册来源。毕竟,您可以通过IoC在组件中引用GlobalAssets。

它可能会导致一些问题,在引导应用程序Reading data before application startup in Angular之前注册和读取必要的文件(配置和其他全局变量,比如从其他端点获取必要的数据)总是更好 - 不是百分之百确定它是怎么回事在Angular 5中改变了。