router.navigate не работает для дочерних маршрутов, использующих angular-8.x - PullRequest
0 голосов
/ 08 июня 2019

Моя конфигурация маршрута выглядит следующим образом:

export const routes: Routes = [
  { path: '', redirectTo: 'home', pathMatch: 'full'},
  {
    path: "register",
    component: Abc,
    canActivate: [NotAuthGard]
  },
  {
    path: "xyz",
    component: Xyz,
    canActivate: [AuthGard],
    children: [
      { path: "xy1", component: XY1 },
      { path: "xy2", component: XY2 },
    ]
  },
  { path: "pqr", component: Pqr, canActivate: [AuthGard] },
  { path: '**', component: PageNotFoundComponent },
];

У меня есть какая-то инъекционная служба, как показано ниже:

import { Injector } from "@angular/core";
import { Router } from "@angular/router";
import { OAuthService } from "../../oAuth/oAuth.service";

@Injectable()
export class ActivityManagerService {
  constructor(
    private injector: Injector,
    private router: Router,
    private oAuth: OAuthService
  ) {
  }
  goto(to: any[] | any, data?: any) {
    if (!to) return;
    if(to[0] === '/'){
      to = to.substring(1);
    }
    this.canActivate(to, canIt => {
      if (!canIt) {
        to = "login";
      }
      if(typeof to === "string"){
        to = to.split('/');
      }
      console.log('to, data: ',to, data)
      if (data) {
        this.router.navigate(to, data);
      } else {
        this.router.navigate(to);
      }
    });
  }
  canActivate(route, cb) {
    this.oAuth
      .authenticate(route.path)
      .then((d: any) => {
        console.log('d: ', d);
        cb(!!d);
      })
      .catch(e => {
        console.log(e, "Error, Chack login no actuive--------------------");
        cb(false);
      });
  }
}

Когда я маршрутизирую либо с помощью activity.goto ('xyz /xy1 ') или загружая через браузер (' / xyz / xy1 '), он работает для корневых маршрутов, но для дочерних маршрутов он просто перенаправляет на дом.

...