0

我正在尝试使用导航栏上的 [routerlink] 导航到同一条路线。因为在角度中,重定向到同一个组件以调用 ngOnint 是不可能的,我遇到了这个问题。

导航栏上的导航

[routerLink]="['/customer/events']"

构造函数中的代码

  constructor(
     private navbarService: ServicesInterCustomerNavbarService,
     private router: Router,
     private route: ActivatedRoute
  ) {
     this.route.params.subscribe(params => {
       this.selectedEventId = params["id"];
       this.getfunction();
    });
 }

我的 ngOnInit 如下所示

ngOnInit() {
    this.ongoing = [];
    this.navbarService.sendCurrentRoute("home");
    this.route.firstChild && this.route.firstChild.params.subscribe(params => {
      this.selectedEventId = params["id"];
      this.getfunction();
    });
}
getfunction() {
    this.ongoing = [];
    this.eventService.getOnging().subscribe(data => {
      this.ongoingEvents = data["data"].map(event => new CustomerEvent(event));
      if (!this.selectedEventId && this.selectedEventId != 'completed' && this.ongoingEvents.length >0) {
        this.redirectToEvent(this.ongoingEvents[0]._id);
      }
      if(this.ongoingEvents.length <1){
        this.redirectToEvent('-1');
      }
      this.dataLoaded = true;
    });
  }

  eventCreated(event_id: string) {
    this.router.navigate(["/customer/events/ongoing", event_id]);
    this.newEventWindow = false;

  }

  redirectToEvent(event_id: string) {
    this.router.navigate(["/customer/events/ongoing", event_id]);
  }

第一次单击路由器导航后的路由器链接类似于

/客户/事件/进行中/sda3i4un34j3b42

但是当我尝试单击相同的导航按钮时,路由器链接如下所示

/客户/活动/

这里的问题是没有调用 getfunction() 和 OnInit 有人能解决这个问题吗?

谢谢

4

2 回答 2

1

你应该只做一个启用 shouldreusestartergy 的函数重定向

reInitComponent(){
this.router.routeReuseStrategy.shouldReuseRoute = () => false;

this.router.navigate(["/customer/events/ongoing", event_id]);

}

每当您想重新加载并调用所有角度生命周期挂钩时,请调用此 reInitComponent()

于 2020-02-10T16:47:49.760 回答
0

我们可以添加一个动态变化的查询参数。

this.router.navigate(['/routedComponent'], {
   queryParams: {refresh: new Date().getTime()}
});

所以我们可以检查查询参数是否在构造函数中改变,并传递我们需要执行的函数。

通过这种方法,可以修复路由到具有不同参数的相同组件的问题

于 2020-02-11T02:47:19.830 回答