8

这是守门员:

// my.guard.ts
import { Injectable } from '@angular/core';
import { ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot } from '@angular/router';

Injectable()
export class MyGuard implements CanActivate {
  canActivate(next: ActivatedRouteSnapshot, prev: RouterStateSnapshot) {
    console.log('GUARD:', next, prev);
    return true;
  }
}

这是路由器:

import { RouterConfig } from '@angular/router';
import { MyGuard } from './guards/my.guard';
export const AppRoutes : RouterConfig = [
  {
    path: 'home',
    component: HomeComponent,
    canActivate: [MyGuard]
  }
];

当页面加载时,我得到:

EXCEPTION: Error: Uncaught (in promise): No provider for MyGuard!

我见过的任何教程都没有提到如何将 MyGuard 作为提供者注入。我该怎么做呢?

4

3 回答 3

12

我的解决方案是将 AuthGuard 服务添加到我的 AppModule 元数据中的提供程序:

@NgModule({
    ...
    providers: [AuthGuard],
})
export class AppModule {}

为了能够在整个应用程序中使用服务,您需要在 AppModule 元数据中提供它。https://angular.io/docs/ts/latest/guide/ngmodule.html上的“服务提供商”部分给了我提示。

于 2016-10-13T20:51:20.597 回答
3

你的路由配置应该是这样的:

export const APP_ROUTER_PROVIDERS = [
    MyGuard, <== notice this line
    provideRouter(AppRoutes )
];

接着

import { APP_ROUTER_PROVIDERS } from './app.routes';    
import { AppComponent } from './app.component';

bootstrap(AppComponent, [
    APP_ROUTER_PROVIDERS
])
于 2016-07-28T19:39:26.980 回答
2

我通过添加'MyGuard'in providers 数组解决了这个问题

@NgModule({
  declarations: [
..........
],
providers: [MyGuard]
........
于 2018-06-18T13:59:48.437 回答