当路由器收到导航到相同URL Angular 4的请求时,是否可以重新加载页面

时间:2018-03-27 10:55:14

标签: angular angular5

我是棱角分明的新人。 我已经阅读了Angular 5中的新功能 - 使用'onSameUrlNavigation'现在可以在路由器收到导航到同一个UR的请求时重新加载页面吗? 目前我使用的是4.4.6版。 'onSameUrlNavigation'在角度版本4中不可用。

还有其他方法可以在角度4中做同样的事情。为了达到这个要求,我必须做些什么。

providers: [
  RouterModule.forRoot(routes, {
     onSameUrlNavigation: 'reload'
  })
]

3 个答案:

答案 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钩子来重新初始化组件。