【问题标题】:queryParam not working right with angular routingqueryParam 不适用于角度路由
【发布时间】:2018-01-18 21:55:26
【问题描述】:

我目前有一个路径设置如下的路由器:

{path: "application/:id", component: ApplicationComponent}

我使用 ngFor 循环生成链接菜单。它使用索引生成一个动态的routerLink:

routerLink="application/{{index}}"

单击后,它会转到正确的 URL,并使用我的 ApplicationComponent 的 ngOnInit 方法来获取 url 中的索引并将特定对象从单独的类中的数组中拉出。

但是它只适用于您点击的第一个链接。如果我单击链接 1,它会使用对象 1 的数据正确加载页面。但是,当我单击链接 2 时,它会转到 url 中的 application/2,但会保持对象 1s 的信息。如果我刷新页面并单击链接 2,则会显示对象 2 的信息,因此我知道它正确地从数组中拉出。

我怀疑一旦单击任何链接,ApplicationComponent 使用 ngOnInit 方法来制作组件,然后如果单击另一个,则不会调用此方法,因此不会更新变量。

我该如何解决这个问题?我需要应用程序组件知道我已经到了一个新的子链接,以便它可以再次调用 ngOnInit

【问题讨论】:

    标签: javascript html angular angular-ui-router query-parameters


    【解决方案1】:

    ngOnInit 仅在组件加载时调用一次。因此,如果您导航到 application/1,则会调用 ngOnInit。如果您随后导航到 application/2,则不会再次调用 ngOnInit,因为该组件已加载。您需要使用 ActivatedRoute 中的 paramMap 之类的东西来检测参数何时发生变化。

    ngOnInit(){
        this.activatedRoute.paramMap.subscribe(paramMap => {
            let id = paramMap.get('id'); // id gets updated whenever parameters change
    
            // add or call any code that needs to re-run when a parameter changes here
        });
    }
    

    【讨论】:

    • 无论出于何种原因,在我将 id 设置为字段之前,它都对我不起作用。我配置其他东西的方式一定有问题。我也将 'paramMap.get('id') 更改为 'this.route.snapshot.paramMap.get('id');'而且效果很好
    猜你喜欢
    • 2018-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-03
    • 1970-01-01
    • 1970-01-01
    • 2019-12-22
    • 1970-01-01
    相关资源
    最近更新 更多