0

我这样设置路由

{
     path: ':parent', component: ParentComponent,
     resolve: { data: ParentResolve },
     children: [
         {
              path: ':child', component: ChildComponent,
              resolve: {
                   data: ChildResolve
              }
         }
}

一切正常,但是当我将 url 从更改/:parent/:child/:parent. 我想使用从 ParentResolve 获取的参数重定向到子路由。

我的问题:当我手动更改 url 时,Angular 不会调用 Resolve guard,因此我无法重定向到子路由。

不清楚的请追问,谢谢。

4

1 回答 1

1

路由器配置中的“解决”部分在激活之前处理所有路由获取。这意味着当您从任何其他路由而不是从它自己的子路由输入此路由时,它将被调用(因为该路由已被激活)。

我认为解决此问题的最佳方法是将路由更改事件侦听器添加到您的 ParentComponent 并在那里处理它。

试试你这样的事情:

export class ParentComponent implements OnInit, OnDestroy {
  routeEventSubscription$;
  routerData;
  constructor(private activatedRoute: ActivatedRoute,
              private router: Router) {
    this.name = `Angular! v${VERSION.full}`
  }

   ngOnInit() {
    this.subscribeToRouteChange();
  }

  subscribeToRouteChange(){
    this.routerData=this.activatedRoute.snapshot.params['data'] //Your router resolver data.
    this.routeEventSubscription$ = this.router.events
      .filter(event => event instanceof NavigationStart) //Subscribe only to NavigationStart event
      .subscribe(event => {
        this.routeToChild();
      });
  }

  routeToChild(){
    /**
     * Add your logic here.
     * Use this.routerData as you.
     */
  }



  ngOnDestroy(){
    //Dont forget to unsubscribe routeEventSubscription$!
    this.routeEventSubscription$.unsubscribe();
  }
  }

您可以在此处此处阅读有关路由数据解析的更多信息

于 2017-08-15T08:06:40.280 回答