【问题标题】:Route parameters - subscribe method路由参数 - 订阅方法
【发布时间】:2026-02-05 20:45:01
【问题描述】:

“如果组件已经存在于 DOM 中,Angular 不会创建组件。它会重用组件实例。这意味着当用户再次导航到组件时不会调用 ngOnInit 生命周期挂钩。”

基于此,我不明白为什么ngOnInitlifecyle方法在我们检索路由参数时如果包含.subscribe方法,又会被调用。

谁能帮我解决这个问题?

谢谢。

【问题讨论】:

    标签: angular angular-routing subscribe ngoninit route-parameters


    【解决方案1】:

    我们可以通过多种方式访问​​路由参数,使用 -->

    this.route.snapshot.params["someParam"]
    

    this.route.params.subscribe()
    

    假设我们对.subscribe 使用第二种方法,因为您对这种情况感兴趣。即使它在 ngOnInit 生命周期方法中,如果路由参数已更改,它也会被触发。我们订阅了某些更改(路由参数更改),因此如果它们发生更改,我们将获得最新值。

    所有事情都结束了,这与ngOnInit无关。这是关于我们的订阅。我们正在“倾听”这些变化。

    仅供参考,如果您使用第一种方法this.route.snapshot.params["someParam"],而我们没有.subscribe,则此方法不会再次触发。它只会运行一次,不会再次运行,因为我们对可能即将发生的路由参数更改“不感兴趣”。

    【讨论】:

    • 那么,我们是否可以通过使用 .subscribe 到另一个方法(而不是在 ngOnInit 中)来订阅这些更改?或者它只是以这种方式工作?谢谢。
    • ngOnInit中对subscribe的意义最大,因为它是组件生命周期中第一个被调用的方法。如果组件中有@Input 属性,则方法ngOnChanges 仅在ngOnInit 之前调用,但ngOnInit 更有意义。