代码之家  ›  专栏  ›  技术社区  ›  Tuxedo Joe

为什么我不能把事情记录在角护板上?

  •  2
  • Tuxedo Joe  · 技术社区  · 7 年前

    我有一条线路被一个不起作用的警卫保护着。当我尝试使用console.log进行调试时,什么也没有发生。我错过了什么?

    这是我的app-routing.module.ts:

    import { NgModule } from '@angular/core';
    import { RouterModule, Routes } from '@angular/router';
    import { ForetagsprofilComponent } from 
    import { UserHasJwtToken } from './guards/user-has-jwt-token.guard';
    
    const appRoutes: Routes = [
      {
        path: '',
        component: SearchForetagsprofilComponent
      },
      {
        path: 'redigera',
        component: ForetagsprofilComponent,
        canActivate: [UserHasJwtToken]
      }
    

    这是我的guard user-has-jwt-token.guard.ts:

    import { Injectable, OnInit } from '@angular/core';
    import { CanActivate, Router } from '@angular/router';
    import { AfUserService } from '../services/af-user-service';
    import { AfUserInfo } from '../model/af-user-info';
    
    @Injectable()
    export class UserHasJwtToken implements CanActivate, OnInit {
    
      private _afUserInfo = new AfUserInfo();
      constructor(private afUserService: AfUserService, private router: Router) {
      }
    
      ngOnInit(): void {
        this.afUserService.getUserInfo().subscribe(response => {
          this._afUserInfo = response;
        });
    
        console.log('Customernumber: ' + this.afUserService.getUserInfo());
      }
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   Zlatko    7 年前

    你错过了一个 canActivate 需要返回布尔值或可观察值的方法。在您的情况下,如下所示:

    canActivate() {
      console.log('Checking if there is user info');
      // I am not subscribing here. I am just returning the observable.
      // Router will subscribe to it on each call.
      return this.afUserService.getUserInfo()
      .pipe(
         // We do, however, wanna log the response 
         tap(response => console.log('Got response:', response);
         // Also, we wanna return a boolean. E.g if there's a property `isLoggedIn`on the response.
         // if we return true, the routing happens. if we return false, the router blocks the route.
         map(response => response.isLoggedIn),
      );
    

    激活 方法是 激活 从Angular导入并尝试实现的接口。也许你的IDE(比如vs代码)警告过你这个方法不见了——你应该检查这些错误,他们会立即向你指出问题所在。你可以运行类似 ng lint 在未来检查这些问题。

        2
  •  1
  •   Padmapriya Vishnuvardhan    7 年前
    canActivate(): Observable<boolean> {
    this.afUserService.getUserInfo().subscribe(response => {
          this._afUserInfo = response;
        });
    
        console.log('Customernumber: ' + this.afUserService.getUserInfo());
    }
    

    这样就行了!

    推荐文章