Angular@Input在浏览器背面不起作用,组件赢了';不渲染

Angular@Input在浏览器背面不起作用,组件赢了';不渲染,angular,typescript,ngxs,Angular,Typescript,Ngxs,在父组件上,我有一个从商店获得的产品列表: /。。。 恩戈尼尼特(){ 此.products$.subscribe(产品=>{ 这一点。产品=产品; }) } // ... 以及在子产品列表上的: /。。。 @Input()产品:IPProduct[]; // ... 而且我还有每一张产品卡显示产品图片 我面临的问题是,当我登陆此页面时,我能够查看所有产品,但当我单击页面上的某个内容,然后浏览器返回此页面时,产品列表不会显示 控制台中没有任何错误,我可以确认子组件正在第二次渲染时接收

在父组件上,我有一个从商店获得的产品列表:

/。。。
恩戈尼尼特(){
此.products$.subscribe(产品=>{
这一点。产品=产品;
})
}
// ...

以及在子产品列表上的:

/。。。
@Input()产品:IPProduct[];
// ...

而且我还有每一张
产品卡
显示
产品图片

我面临的问题是,当我登陆此页面时,我能够查看所有产品,但当我单击页面上的某个内容,然后浏览器返回此页面时,产品列表不会显示

控制台中没有任何错误,我可以确认子组件正在第二次渲染时接收数据,并在调试控制台中添加调试点

为什么我的子组件仅在第一次渲染时显示?即使刷新也不行。
只有当我通过在浏览器中输入url来导航到页面时,我才能显示相同的组件。提前感谢。

ngInit不会在导航返回时被调用。使用ActivatedRoute并订阅参数:

constructor(route: ActivatedRoute) {
  route.params.subscribe(x => {

  });
}
如果要同时订阅这两个,请使用CombineTest。

结果是,我的顶级组件没有实现OnDestroy,该组件在重定向后仍然存在。我通过以下操作解决了问题:

@组件({/*…*/})
类topComponent实现OnInit、OnDestroy{
// ...
私有只读销毁$=新主题();
// ...
恩贡德斯特罗(){
this.destroy$.next();
此.destroy$.complete();
}
}
destroy$.[METHOD]
将放弃您使用
this.[SELECT].pipe(takeUntil(this.destroy$).subscribe(…)
订阅的任何订阅的观测值。相当整洁


谢谢你的帮助

“导航返回时未调用ngInit”。你确定吗?“我很肯定是的。”tinnick为迟来的答复感到抱歉。如果您在订阅服务器中放置了console.log。它每次都会触发吗?是的。我想我的问题是:)对
这个.products$
在什么地方感到困惑:
这个.store.select(这个.products$)
如果它是可观察的,我很惊讶它能工作。它应该是一个选择器。@Richard.Davenport我写错了我的例子。谢谢你指出。如果你知道你不会在更新中更新产品商店,你也可以使用take(1)component@SalminSkenderovic是的,根据具体情况,这是一种更好的方法,因为不需要像我一样创建一个可观察的多播。好的。