angular - 使用 CanActivate 守卫时获取 "No provider error"

标签 angular angular2-routing angular2-guards

这是守卫:

// 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 作为提供者注入(inject)。我该怎么做?

最佳答案

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

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

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

关于angular - 使用 CanActivate 守卫时获取 "No provider error",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38645267/

相关文章:

angular - 向 angular.json 添加环境配置的正确方法是什么?

node.js - 是什么阻止我的 AngularJs 2 应用程序运行检查器中显示的命令?

Angular 2 - 使用 HashLocationStrategy 时 base-href 是多余的

angular - 在 Angular2 的 CanActivate 中注入(inject)服务

Angular 2 路由守卫不等待设置值

Angular HttpClient 方法不转换响应类型

javascript - 本地存储可观察服务上的主题切换器

angular - 如何在angular2中导航到新标签

html - 如何在 angular2 中使用一个 routerLink 触发多个导出(2.1.1)

angular - 对 Angular 2 应用程序中的所有路由使用基础保护