Angular 5 路由器插座,JWT

Posted

技术标签:

【中文标题】Angular 5 路由器插座,JWT【英文标题】:Angular 5 router-outlet, JWT 【发布时间】:2018-09-27 12:04:59 【问题描述】:

我需要像这样将令牌属性添加到我的组件中:

<div>
  <app-authentication [(token)]='token'></app-authentication>
</div>

但是路由处理我的组件,所以我不知道如何实现

[(token)]='token'

部分。

目前我的 app.component.html 看起来像这样:

<app-header></app-header>
<div class="container">
    <router-outlet></router-outlet>
</div>

和 app-routing.module.ts 这样的:

import  NgModule, Input  from '@angular/core';
import  Routes, RouterModule  from '@angular/router';
import  ProjectListComponent  from './projects/project-list/project-list.component';
import  ProjectsViewComponent  from './projects/projects-view/projects-view.component';
import  AdminComponent  from './admin/admin.component';
import  Headers  from '@angular/http';

const routes: Routes = [
  
    path: '',
    component: ProjectListComponent,
    pathMatch: 'full'
  ,
  
    path: 'admin',
    component: AdminComponent
  ,
  
    path: ':slug',
    component: ProjectsViewComponent
  
];

@NgModule(
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule],
  providers: []
)
export class Wpng2RoutingModule 

【问题讨论】:

您将出于什么目的使用@Input 作为令牌?如果此方法是为了验证对组件的访问,您可以在路由器中使用 guard 来限制对受保护组件的访问 【参考方案1】:

您应该使用依赖注入来提供令牌。你可以这样设置。

app.module.ts

import  InjectionToken  from '@angular/core';

export const JWT = new InjectionToken<string>('JWT');

@NgModule(
  imports: [
    ...
  ],
  declarations: [AppComponent],
  bootstrap: [AppComponent],
  providers: [
    AuthService,
    
      provide: JWT,
      useFactory: (auth: AuthService) => authService.jwt,
      deps: [AuthService],
    ,
  ],
)
export class AppModule 

any.component.ts

import  Component, Inject  from '@angular/core';

@Component( selector: 'any' )
export class AnyComponent 
   constructor(@Inject(JWT) public jwt: string) 
      // do something with the token
   

【讨论】:

以上是关于Angular 5 路由器插座,JWT的主要内容,如果未能解决你的问题,请参考以下文章

Angular 4 嵌套路由器插座

Angular2 - 具有登录结构的路由器插座

Angular 使用了错误的路由器插座

路由器插座的Angular 2延迟渲染

在 Angular 2+ 中,使用路由器插座和嵌套组件有啥区别

如何使用路由器插座加载 Angular 组件