x.routes.ts中没有服务提供商

时间:2016-06-29 06:21:16

标签: angular

我正在为我的angular2应用程序进行基于令牌的身份验证,我使用最新的r.c.3路由器

完成了它

这是我在site.routes.ts文件中的代码

import {Authentication}  from './authenticaton.service';
import { RouterConfig,CanActivate } from '@angular/router';
import { SiteComponent} from './site.component';
import { LoginComponent } from './login.component';
import { ProfileComponent } from './profile.component';
export const SITE_ROUTES: RouterConfig = [
  {
    path: '',
    component: SiteComponent,
    children: [
      {
        path: 'login',
        component: LoginComponent
      },
      {
        path: 'profile',
        component: ProfileComponent,
        canActivate: [Authentication]
      }
    ]
  }
];

在编译期间没有错误,但是当我尝试访问配置文件路由时,它在控制台中给出了这个错误。

没有身份验证提供商!

我尝试过提供身份验证提供程序,但x.routes.ts文件中不支持装饰器

这是我的authentication.service.ts文件

import { Injectable } from '@angular/core';
import { CanActivate,Router,ActivatedRouteSnapshot,RouterStateSnapshot } from '@angular/router';
import { AuthService }  from './auth.service';

@Injectable()
export class Authentication implements CanActivate {
  constructor(private authService: AuthService, private router: Router) {}

  canActivate(
    // Not using but worth knowing about
    next:  ActivatedRouteSnapshot,
    state: RouterStateSnapshot
  ) {
    if (this.authService.isLoggedIn) { return true; }
    this.router.navigate(['/login']);
    return false;
  }
}

1 个答案:

答案 0 :(得分:1)

尝试在site.routes.ts中添加带路由器提供程序的const:

export const APP_ROUTER_PROVIDERS = [
  provideRouter(SITE_ROUTES),
  Authentication
];

然后将APP_ROUTER_PROVIDERS添加到引导函数中。

import { APP_ROUTER_PROVIDERS } from 'site.routes.ts';


    bootstrap(AppComponent, [
        ...
        APP_ROUTER_PROVIDERS
        ...
    ]