Angular @Input 无法在浏览器上运行,组件无法呈现
Angular @Input not working on browser back and component won't render
在 parent 组件上,我有一个从商店获取的产品列表:
// ...
ngOnInit() {
this.products$.subscribe(products => {
this.products = products;
})
}
// ...
<!-- ... -->
<ng-container *ngIf="products">
<product-list [products]="products"></product-list>
</ng-container>
<!-- ... -->
然后 child product-list
:
// ...
@Input() products: IProduct[];
// ...
<!-- ... -->
<div *ngFor="let product of products">
<product-card [product]="product">
</div>
<!-- ... -->
比起我每个 product-card
节目 product.image
.
我面临的问题是,每当我登陆此页面时,我都可以查看所有产品,但是当我单击页面上的某些内容而不是浏览器返回此页面时,product-list不显示。
我在控制台中没有任何错误,我可以确认 child 组件正在接收第二次渲染中的数据,在调试控制台中添加调试点。
为什么我的 child 组件只在第一次渲染时显示?甚至刷新都行不通。
只有当我通过在浏览器中输入 url 导航到页面时,我才会显示相同的组件。提前致谢。
导航返回时未调用 ngInit。使用 ActivatedRoute 并订阅参数:
constructor(route: ActivatedRoute) {
route.params.subscribe(x => {
});
}
如果您想同时订阅两者,请使用 combineLatest。
https://www.learnrxjs.io/learn-rxjs/operators/combination/combinelatest
事实证明,我的顶级组件没有实现 OnDestroy
并且该组件在重定向后仍然存在。我通过执行以下操作解决了问题:
@Component({ /* ... */ })
class topComponent implements OnInit, OnDestroy {
// ...
private readonly destroy$ = new Subject<void>();
// ...
ngOnDestroy() {
this.destroy$.next();
this.destroy$.complete();
}
}
destroy$.[METHOD]
将释放您使用 this.[SELECT].pipe(takeUntil(this.destroy$)).subscribe(...)
订阅的任何订阅的可观察对象。很整洁。
感谢您的帮助!
在 parent 组件上,我有一个从商店获取的产品列表:
// ...
ngOnInit() {
this.products$.subscribe(products => {
this.products = products;
})
}
// ...
<!-- ... -->
<ng-container *ngIf="products">
<product-list [products]="products"></product-list>
</ng-container>
<!-- ... -->
然后 child product-list
:
// ...
@Input() products: IProduct[];
// ...
<!-- ... -->
<div *ngFor="let product of products">
<product-card [product]="product">
</div>
<!-- ... -->
比起我每个 product-card
节目 product.image
.
我面临的问题是,每当我登陆此页面时,我都可以查看所有产品,但是当我单击页面上的某些内容而不是浏览器返回此页面时,product-list不显示。
我在控制台中没有任何错误,我可以确认 child 组件正在接收第二次渲染中的数据,在调试控制台中添加调试点。
为什么我的 child 组件只在第一次渲染时显示?甚至刷新都行不通。 只有当我通过在浏览器中输入 url 导航到页面时,我才会显示相同的组件。提前致谢。
导航返回时未调用 ngInit。使用 ActivatedRoute 并订阅参数:
constructor(route: ActivatedRoute) {
route.params.subscribe(x => {
});
}
如果您想同时订阅两者,请使用 combineLatest。 https://www.learnrxjs.io/learn-rxjs/operators/combination/combinelatest
事实证明,我的顶级组件没有实现 OnDestroy
并且该组件在重定向后仍然存在。我通过执行以下操作解决了问题:
@Component({ /* ... */ })
class topComponent implements OnInit, OnDestroy {
// ...
private readonly destroy$ = new Subject<void>();
// ...
ngOnDestroy() {
this.destroy$.next();
this.destroy$.complete();
}
}
destroy$.[METHOD]
将释放您使用 this.[SELECT].pipe(takeUntil(this.destroy$)).subscribe(...)
订阅的任何订阅的可观察对象。很整洁。
感谢您的帮助!