Angular2:当路由参数改变时调用方法/ngoninit

6

我正在制作一种网店,主页上有一个类别下拉菜单,比如父类A和子类B和C。

所有类别A、B和C都由1个组件CatAComponent表示。当我第一次进入其中一个类别时,我的ngOnInit会被调用,并显示需要显示的页面。

当我想点击另一个子类时,我仍然在同一个组件中,但是路由的参数改变了(例如,我之前在localhost:123/CatA/CatB,现在我在localhost:123/CatA/CatC,只有一个参数改变了,因此ngOnInit不会被调用,我的更新方法也不会被调用)。

有没有办法解决这个问题?我不能在我的视图文件中放置(click)方法来引用该方法,因为类别菜单在另一个视图组件中。

当只有一个参数更改时,我能调用NgOnInit吗?

1个回答

18
你需要按照以下方式订阅ActivatedRoute服务:

//组件

import { Component, OnInit } from '@angular/core';
import { ActivatedRoute, Params }   from '@angular/router';

export class YourComponent {
  constructor(
    private route: ActivatedRoute      
  ) {}

  ngOnInit(): void {
    this.route.params.subscribe((params: Params) => {
      console.log(params); 
      // this will be called every time route changes
      // so you can perform your functionality here

    });
  }
}

我太傻了。我已经订阅了params,但是把我的更新方法放在了它的外面而不是里面。谢谢,现在完美运行了。 - TanguyB
2
这个答案涉及到params,而不是整个路由。关于路由,请访问此处https://dev59.com/I1gQ5IYBdhLWcg3woleo - dasfdsa
你还应该将订阅保存在实例变量中,并在 ngOnDestroy 方法中取消订阅。 - AlanObject

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接