Angular6 Router Guard звонит несколько раз - PullRequest
0 голосов
/ 09 октября 2018

Я занимаюсь разработкой приложения с angular6, маршруты моего приложения состоят из множества дополнительных маршрутов, и я заметил, что мое приложение несколько раз вызывает функцию проверки подлинности маршрутизатора, что приводит к замедлению работы моего приложения при переходе от одной страницы к другой.

мой код на данный момент: маршрутизатор

const mainRoutes: Routes = [

    {
    path:"",
    component:MainComponent,
    canActivate:[AuthGuard],
    canActivateChild:[AuthGuard],
    children:[
      {path:'',loadChildren:"./calendar/calendar.module#CalendarModule"},
      {path:'patients',loadChildren:"./patients/patients.module#PatientsModule"},

    ]
  },

];

каждый модуль содержит другие модули, которые также имеют маршрутизатор.

auth.guard.ts:

 canActivate(): Observable<boolean> {
        return this.checkLogin();
    }
    canActivateChild(): Observable<boolean> {
        return this.checkLogin();
  }
  canLoad(route: Route): Observable<boolean>|Promise<boolean>|boolean {
    return this.checkLogin();

}
    //authguard can provide an observable rather than a straight boolean
    checkLogin(): Observable<boolean> {
            return this.authService.checkAuth().map(e => {
                if (e == false) {
                    this.router.navigate(['auth'], );
                    return false;
                }
                return true;
            }).catch(() => {
                console.log("Could not login");
                this.router.navigate(['auth'], );
                return Observable.of(false);
            });
    }

checkAuth:

checkAuth(): Observable<boolean> {
        return this.http.get(HttpService.serverApiUrl+"security/check-auth")
            .map(response => {
                if(response['auth'] == 1) {
          return true;
                } else {
          this.router.navigate(['/auth'])
                    return false;
                }
            });
    }

enter image description here

...