Angular 2-存储全局变量(如身份验证令牌)的最佳方式是什么,这样所有类都可以访问它们



仅角度2问题:

存储全局变量(如身份验证令牌或基本url(环境设置))的最佳方式是什么,这样所有类都可以访问它们,而不会在刷新时丢失它们?

因此,当我登录时,我会给用户一个auth令牌,并通常将其存储在angular 1.x的$rootscope中。

要创建真正的全局范围数据,您应该在应用程序引导期间将您的class\object\值注册为引导函数的依赖参数

bootstrap(MyApp,[MyGlobalService]);

这将在根级别注册您的服务MyGlobalService(实际上它可以是对象或工厂函数,也可以是您自己的提供程序)。这种依赖关系现在可以注入到任何组件中。

与Angular1不同,Angular2应用程序有多个注射器,组件和注射器之间有一对一的映射。每个部件都有自己的喷油器。

Angular开发人员指南中有一些很好的注册示例。请参阅依赖项注入指南。

@Yaniv已经强调了另一个选项。

在我看来,在$rootScope这样的全局变量上存储这样的参数被认为是一种糟糕的做法。在Angular 1.x上,您应该使用一个服务(singelton)来从任何地方获取这些数据。这样,您的数据将从任何地方都可用——您可以注入服务并获得价值。您也可以在单元测试时模拟/监视此服务。

Angular 2应用程序应该构建为组件树。我想,对于您的场景,最好的解决方案是使用根组件下的服务保存它,并将它作为输入传递给子组件。

这样,您的数据将从您的主要组件进行控制。它将是不可变的(子组件不能更改它),并且您的组件不会有外部引用(这是迈向良好组件体系结构的重要一步)。

如果您仍然想以"Angular 1.x的方式"进行操作,我想您可以在任何地方注入此服务并使用其值。它不是首选选项,但它比全局变量更好!

希望这会有所帮助。

在您的特定场景中,您实际上希望将令牌存储在本地存储中,因为页面刷新会导致丢失存储在内存中的令牌值。

您还可以对全局数据(jwt令牌除外)使用ngrx/store,并以冗余方式将其传递给"连接的"组件

相关内容

最新更新