我是棱角分明的新人。 我已经阅读了Angular 5中的新功能 - 使用'onSameUrlNavigation'现在可以在路由器收到导航到同一个UR的请求时重新加载页面吗? 目前我使用的是4.4.6版。 'onSameUrlNavigation'在角度版本4中不可用。
还有其他方法可以在角度4中做同样的事情。为了达到这个要求,我必须做些什么。
providers: [
RouterModule.forRoot(routes, {
onSameUrlNavigation: 'reload'
})
]
答案 0 :(得分:4)
我这样做了:
this.router.routeReuseStrategy.shouldReuseRoute = function(){
return false;
};
this.router是角度Router
类的实例。
答案 1 :(得分:2)
您可以使用RouteReuseStrategy
。在要在路由重用上重新加载的组件中,您可以执行以下操作:
this.router.routeReuseStrategy.shouldReuseRoute = (
future: ActivatedRouteSnapshot,
curr: ActivatedRouteSnapshot
) => {
if (future.url.toString() === curr.url.toString()) {
// reload the page
}
};
答案 2 :(得分:2)
可以用一种更简单的方法来完成。下面是一个小的示例代码:
在routing.module中:“ /产品/:ID /详细信息”
import { ActivatedRoute, Params, Router } from ‘@angular/router’;
export class ProductDetailsComponent implements OnInit {
constructor(private route: ActivatedRoute, private router: Router) {
this.route.params.subscribe(params => {
this.paramsChange(params.id);
});
}
// Call this method on page load
ngOnInit() {
}
// Call this method on change of the param
paramsChange(id) {
}
一般的解释是...为什么当它导致性能下降时,为什么要销毁已经存在的组件实例并为同一情况创建一个新的实例?
这与使用路由模式/product/:id
的行为完全相同,在路由模式中,/product/5
,/product/6
,...也保留了相同的组件实例。
因此,由于组件实例相同,您应该基于某个发出的事件(解析器/保护程序)而不是基于OnInit
钩子来重新初始化组件。