angular - 错误 : Uncaught (in promise): TypeError: guard is not a function

标签 angular typescript angular4-router canactivate

我正在 Angular 4 中编写一个 Authguard 以防止在未登录的情况下访问路由。但是,我收到此错误。下面是 App 模块中 Authgaurd 和 Routing 的代码。请帮助解决问题。

//Authgaurd代码

import { ActivatedRouteSnapshot, CanActivate, Route, Router, 
RouterStateSnapshot } from '@angular/router';
import { Store } from '';
import { Observable } from 'rxjs/Observable';
import { map, take } from 'rxjs/operators';
import { Observer } from 'rxjs';
import { Globals } from '../../app.global';
import { CRMStorageService } from '../services/storage.service';
import 'rxjs/add/operator/take';

@Injectable()
export class AuthGuard implements CanActivate {

constructor(private router: Router,private storageService: StorageService) { 
 }

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): 
Observable<boolean> {
return this.storageService.getItem(Globals._CURRENT_USER_KEY).take(1).map 
(token => {
    if (token) {
        return true;
    } else {
        this.router.navigate(['/login']);
    }
  });
}
}

//App模块中的路由

const appRoutes: Routes = [
{ path:'',redirectTo:'/login', pathMatch: 'full' },
{ path:'login', component: LoginComponent },
{ path:'reset/:token', component: ResetpasswordComponent },
{
path: '',
canActivateChild: [AuthGuard],
children: [
{ path:'dashboard', component: DashboardComponent },
{ path:'customerlist', component: CustomerlistComponent }
]
},
{ path: '**', component: ErrorComponent }
];

@NgModule({
imports: [
        RouterModule.forRoot(appRoutes,
        {
         enableTracing: false // <-- debugging purposes only
        })],
 declarations: [
  AppComponent,
 .
 .
],
providers: [AuthGuard],
exports: [],
bootstrap: [AppComponent]})

export class AppModule { }

最佳答案

You must have to implement both the CanActivate and CanAcitvateChild interface on the AuthGuard in order to use it on canActivateChild

export class AuthGuard implements CanActivate, CanActivateChild {
  ...
  canActivateChild(route: ActivatedRouteSnapshot, state: RouterStateSnapshot):  boolean {
      return this.canActivate(route, state);
 }
}

关于angular - 错误 : Uncaught (in promise): TypeError: guard is not a function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48447774/

相关文章:

angular - 模块 'MdAutocompleteModule' 声明了意外的模块 'AppModule'。请添加@Pipe/@Directive/@Component注解

javascript - 是否可以运行两个 Angular 应用程序,一个是 1.6.4,另一个是 6.1?

angular - 如何为 ng2-charts 条形图设置静态标签?

javascript - 我可以在加载页面之前将数据保存在 guard 中吗

javascript - 允许 Angular 4 路由传递 URL 中的特殊字符

angular - 如何从 Angular2 和 ng-bootstrap 的组件中的 NgbTabSet 访问 'select' 方法?

javascript - 在 TypeScript 中使用 Datejs

typescript - tsx 文件中的通用类型解析

javascript - 如何 stub 从另一个函数调用的模块函数

asp.net - 在带有母版页的 .net ASPX 页面中嵌入 Angular 应用程序