【问题标题】:Angular router.navigate doesn't route to resolver if on same component如果在同一组件上,Angular router.navigate 不会路由到解析器
【发布时间】:2020-05-06 02:24:23
【问题描述】:

我从页面顶部的导航栏组件执行搜索。 从导航栏输入搜索条件时,我可以路由到我的“成员”组件页面,但是一旦我在“成员”组件上并更改查询参数并尝试再次运行 router.navigate() 我无法让 Angular 访问我的解析器。

这是我所做的以及我在导航调用上方尝试的操作,ReuseRoute 或 onSameUrlNavigation 似乎都无法在组件上再次点击我的解析器。

问题是——应该吗?因为也许我在某个地方出了点问题!

// tried with no luck
this.router.routeReuseStrategy.shouldReuseRoute = () => false;
// tried with no luck
this.router.onSameUrlNavigation = 'reload';
this.router.navigate(['/members'], {
  queryParams: {
    latitude: this.locationLatitude,
    longitude: this.locationLongitude,
    gender: this.gender,
    minAge: this.ageFrom,
    maxAge: this.ageTo,
    orderBy: this.orderBy
  }
});

【问题讨论】:

    标签: javascript angular angular-routing angular-resolver


    【解决方案1】:

    您需要订阅查询参数更改

    constructor(
        private activatedRoute: ActivatedRoute,
    ) { }
    
    this.activatedRoute.queryParams.subscribe(params => {
        console.log(params);
        // logic after subscribing
    });
    

    所以基本上只要您更改 queryParams,它就会触发该订阅,您可以从那里运行您的逻辑

    【讨论】:

    • 这条路线subscribe应该写在哪里?
    • @Sixteen 你可以在任何地方写它,但我通常会把它放在ngOnInit
    【解决方案2】:

    实际上,在这些情况下会调用解析器。您可以通过调试器简单地检查它。我最近遇到了类似的问题,我的解析器中有一个错误,组件中有另一个错误(正如@smokey-dawson 所写 - 我错过了对 route.data 的订阅)

    【讨论】:

      【解决方案3】:

      路由可以将runGuardsAndResolvers 属性设置为always 以始终在导航时运行守卫和解析器。默认情况下,它们会在路由或路由参数更改时运行。

      {
        path: 'some/path/:and/:id',
        component: MemberComponent,
        ...
        runGuardsAndResolvers: 'always'
      }
      

      【讨论】:

        猜你喜欢
        • 2017-10-19
        • 1970-01-01
        • 2017-03-02
        • 2017-01-14
        • 2017-01-13
        • 2017-11-16
        • 1970-01-01
        • 1970-01-01
        • 2019-12-10
        相关资源
        最近更新 更多