angular - 以 Angular 更改零件布线时重新加载组件

标签 angular routing angular6 router angular-routerlink

I use angular 6.

I have ListComponent which show list of products.



我的路由
{
     path: ('list/:category/:subcategory'),
     component: ListComponent
}

一个标签
<a class="link" [routerLink]="['/list/' + item.titleEn ]">
    {{ item.title }}
</a>

<a class="sub-link" [routerLink]="['/list/' + item.titleEn + '/' + itemSub.titleEn ]"
    {{ itemSub.title }}
</a>

现在,当我单击 HomeComponent (/home) 中的“/list/car/bmw”时,这会起作用并呈现 ListComponent。
但是当我在 ListComponent (/list/car/benz) 中单击“/list/car/bmw”时,这不起作用并且不呈现 ListComponent。

最佳答案

  • 当第一"/list/car/bmw"加载然后 angular 得到了一个参数化的路由 "list/:category/:subcategory"哪个匹配 "/list/car/bmw"网址。所以它会渲染你的组件 ListComponent .
  • 如果通过任何操作(按钮单击或 anchor 单击),如果您的 url 更改为 "/list/car/benz" 那么它不会呈现 ListComponent 。因为 ListComponent 已经加载了参数化路由 'list/:category/:subcategory' 在这种情况下,路由是没有改变,但路由器参数正在改变 .

  • 并检测参数变化请使用 激活路由 检查参数的任何更改。

    步骤 1 - 做 ActivatedRoute 的构造函数注入(inject)
    constructor(private activatedRoute: ActivatedRoute) {
       // Code snippet
       this.subscribeRouteChange();
    }
    

    第 2 步 - 订阅路由参数更改
    subscribeRouteChange() {
        this.activatedRoute.params.subscribe((params = {}) => {
            // Will log any change to the route.
            // You can add your own logic here
            console.log(params.category);
            console.log(params.subcategory)
        });
    }
    

    关于angular - 以 Angular 更改零件布线时重新加载组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53680613/

    相关文章:

    angular - 如何防止对 URL 中的斜杠进行编码?

    php - Heroku 403 禁止错误

    nginx - 如何在 Nginx 上游使用 Docker swarm DNS/服务名称

    javascript - Angular 2+ - 在 HTML FORM 中动态添加 DOM 元素

    html - 动态添加时angular6 matRipple不起作用

    angular - 异步验证器无法在 Angular 中使用模板驱动的表单

    javascript - 我将如何随机播放 Angular 4 中的输入表单元素

    angular - 如何添加服务提供者

    angular - 为什么我在传单弹出窗口中的按钮不起作用?

    angular - 在Angular 6中通过http get处理复杂对象