Angular 2 - 存储全局变量(如身份验证令牌)以便所有 类 都可以访问它们的最佳方法是什么?
Angular 2 - Whats the best way to store global variables like authentication token so all classes have access to them?
Angular 只有 2 个问题:
存储身份验证令牌或基础 url(环境设置)等全局变量的最佳方式是什么,以便所有 类 都可以访问它们而不会在刷新时丢失它们?
所以当我登录时,我会给用户一个授权令牌,通常将其存储在 $rootscope 中 angular 1.x.
在我看来,在 $rootScope 这样的全局变量上存储这样的参数被认为是一种不好的做法。在 Angular 1.x 上,您应该使用服务 (singelton) 以便从任何地方获取此数据。这样你的数据就可以从任何地方获得——你可以注入你的服务并获得价值。您也可以在单元测试时 mock/spy 此服务。
Angular 2 个应用程序应构建为 component tree。我想您的场景的最佳解决方案是使用根组件下的服务保存它,并将其作为输入传递给子组件。
这样您的数据将从您的主要组件进行控制。它将是不可变的(子组件无法更改它)并且您的组件将没有外部引用(这是迈向良好组件架构的重要一步)。
如果您 "Angular 1.x way" 仍想这样做,我想您可以在任何地方注入此服务并使用它的值。它不是首选选项,但它比全局变量更好!
希望对您有所帮助。
好吧,要创建真正的全局范围数据,您应该在应用 bootstrapping 期间将 class\object\value 注册为 bootstrap 函数
的依赖参数
bootstrap(MyApp,[MyGlobalService]);
这将在根级别注册您的服务 MyGlobalService
(事实上它可以是对象或工厂函数或您自己的提供者)。现在可以将此依赖项注入到任何组件中。
与 Angular1 不同的是,一个 Angular2 应用程序有多个可用的注入器,在组件和注入器之间具有一对一的映射。每个组件都有自己的注入器。
Angular 开发人员指南有一些此类注册的很好示例。请参阅 Dependency Injection 上的指南。
@Yaniv 已经强调了另一个选项。
在您的特定场景中,您实际上希望将令牌存储在本地存储中,因为页面刷新会导致您丢失存储在内存中的令牌值。
你也可以使用 ngrx/store,作为全局数据(jwt token 除外)并以 redux 方式将其传递给 'connected' 组件
Angular 只有 2 个问题:
存储身份验证令牌或基础 url(环境设置)等全局变量的最佳方式是什么,以便所有 类 都可以访问它们而不会在刷新时丢失它们?
所以当我登录时,我会给用户一个授权令牌,通常将其存储在 $rootscope 中 angular 1.x.
在我看来,在 $rootScope 这样的全局变量上存储这样的参数被认为是一种不好的做法。在 Angular 1.x 上,您应该使用服务 (singelton) 以便从任何地方获取此数据。这样你的数据就可以从任何地方获得——你可以注入你的服务并获得价值。您也可以在单元测试时 mock/spy 此服务。
Angular 2 个应用程序应构建为 component tree。我想您的场景的最佳解决方案是使用根组件下的服务保存它,并将其作为输入传递给子组件。
这样您的数据将从您的主要组件进行控制。它将是不可变的(子组件无法更改它)并且您的组件将没有外部引用(这是迈向良好组件架构的重要一步)。
如果您 "Angular 1.x way" 仍想这样做,我想您可以在任何地方注入此服务并使用它的值。它不是首选选项,但它比全局变量更好!
希望对您有所帮助。
好吧,要创建真正的全局范围数据,您应该在应用 bootstrapping 期间将 class\object\value 注册为 bootstrap 函数
的依赖参数bootstrap(MyApp,[MyGlobalService]);
这将在根级别注册您的服务 MyGlobalService
(事实上它可以是对象或工厂函数或您自己的提供者)。现在可以将此依赖项注入到任何组件中。
与 Angular1 不同的是,一个 Angular2 应用程序有多个可用的注入器,在组件和注入器之间具有一对一的映射。每个组件都有自己的注入器。
Angular 开发人员指南有一些此类注册的很好示例。请参阅 Dependency Injection 上的指南。
@Yaniv 已经强调了另一个选项。
在您的特定场景中,您实际上希望将令牌存储在本地存储中,因为页面刷新会导致您丢失存储在内存中的令牌值。
你也可以使用 ngrx/store,作为全局数据(jwt token 除外)并以 redux 方式将其传递给 'connected' 组件