Ang*_*arM 19 typescript angular
仅限Angular 2问题:
什么是存储全局变量(如身份验证令牌或基本URL)(环境设置)的最佳方法,以便所有类都可以访问它们而不会在刷新时丢失它们?
因此,当我登录时,我将为用户提供一个身份验证令牌,并且通常将其存储在$ rootscope中以获得角度1.x.
Cha*_*ani 15
那么要创建真正的全局范围数据,您应该在app bootstrapping期间将class\object\value注册为bootstrap函数的依赖参数
bootstrap(MyApp,[MyGlobalService]);
这将MyGlobalService在根级别注册您的服务(实际上它可以是对象或工厂函数或您自己的提供者).现在可以将此依赖项注入任何组件.
与Angular1不同,Angular2应用程序可以使用多个Injectors,在组件和注入器之间进行一对一映射.每个组件都有自己的注入器.
Angular开发人员指南有一些很好的注册示例.请参阅依赖注入指南.
@Yaniv已经强调了另一个选项.
在我看来,像$ rootScope这样在全局变量上存储这样的参数被认为是一种不好的做法.在Angular 1.x上,你应该使用服务(singelton)来从任何地方获取这些数据.这样您的数据就可以从任何地方获得 - 您可以注入您的服务并获得价值.您还可以在单元测试时模拟/侦察此服务.
应将Angular 2应用程序构建为组件树.我想你的方案的最佳解决方案是使用根组件下的服务保存它,并将其作为输入传递给子组件.
这样,您的数据将从主要组件进行控制.它将是不可变的(子组件不能更改它),并且您的组件将没有外部引用(这是迈向良好组件体系结构的重要一步).
如果您仍然希望以"Angular 1.x方式"执行此操作,我想您可以在任何地方注入此服务并使用其值.它不太受欢迎,但它比全局变量更好!
希望这很有帮助.