Angular 角度导航到同一组件多次

Angular 角度导航到同一组件多次,angular,typescript,rxjs,angular-resolver,Angular,Typescript,Rxjs,Angular Resolver,我试图通过导航栏上的[routerlink]导航到同一条路线。 因为在angular中,重定向到同一个组件以调用ngOnint是不可能的,所以我遇到了这个问题 导航栏导航 [routerLink]="['/customer/events']" 构造函数中的代码 constructor( private navbarService: ServicesInterCustomerNavbarService, private router: Router, priva

我试图通过导航栏上的[routerlink]导航到同一条路线。 因为在angular中,重定向到同一个组件以调用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() {
    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]);
  }
ngOnInit(){
此参数为[];
此.navbarService.sendCurrentRoute(“主”);
this.route.firstChild&&this.route.firstChild.params.subscribe(params=>{
this.selectedEventId=params[“id”];
这个函数是.getfunction();
});
}
getfunction(){
此参数为[];
this.eventService.getOnging().subscribe(数据=>{
this.ongoingEvents=data[“data”].map(event=>newcustomerevent(event));
如果(!this.selectedEventId&&this.selectedEventId!=“已完成”&&this.ongoingEvents.length>0){
this.redirectToEvent(this.ongoingEvents[0]。\u id);
}

如果(this.ongoingEvents.length,您应该只做一个函数重定向,启用shouldruessetartergy

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

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

}

每当您想重新加载并调用所有角度生命周期挂钩时,请调用此reInitComponent(),我们可以添加一个动态更改的查询参数

this.router.navigate(['/routedComponent'], {
   queryParams: {refresh: new Date().getTime()}
});
因此,我们可以检查查询参数是否在构造函数中更改,并传递需要执行的函数


使用这种方法,可以修复路由到具有不同参数的同一组件的问题,谢谢!但是我使用了这种方法。但是当事件id=-1时,组件将在一个永无止境的循环中重新启动。知道吗?只需检查ngOnInit方法参数id如果是-1,则不调用重载函数,否则调用e reload function是true,但根据我的代码,我没有通过[routerlink]传递任何参数,因此不会有任何参数。因为我在构造函数中使用了重用策略。只需在routerlink代码中传递一个可选或必需的参数,如下所示:/idThank!我使用以下方法解决了这个问题。