在我的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
来存储我的应用程序周围的所有变量吗?
答案 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中改变了。