1

我在路由器插座中显示了一个A 组件,在其中我有另一个B 组件,它有一个命名的路由器插座,我在其中显示另一个C 组件

Router-outlet
A Component
    B Component
    Named Router-outlet
        C Component

在这个C 组件中,我执行验证,在此之后,我想回到A 组件重新加载它(执行 ngOnInit 或任何方法)。

我已经尝试过使用不同的方法,例如导航、navigateByUrl 和 Location.back()。问题是A 组件永远不会被销毁,因此它永远不会执行 ngOnInit 方法。

有人知道我该如何解决这个问题?谢谢!

4

2 回答 2

1

我不太确定您将如何再次执行 ngOnInit,但一种解决方法可能是订阅路由器事件(如此处所述)并在其中执行您想要的代码。

于 2018-02-26T23:11:49.727 回答
1

您可以创建一个服务来处理这种特定情况

   export class RefreshService{   
       private refreshMessage = new BehaviorSubject<any>(null);        
       refreshObservable = this.refreshMessage.asObservable();

       sendRefreshMessage() {
         this.refreshMessage.next("");
       }
    }

在组件 AI 中订阅我的 observable

export class AComponent implements OnInit {

  constructor(private refreshService: RefreshService) { }

  ngOnInit() {
   this.refreshService.subscribe(res => { do stuff here } );
  }

}

执行验证后在组件 C 中:

this.refreshService.sendRefreshMessage();

这将触发您在组件 A 中的订阅,然后将执行订阅中的所有代码

于 2018-02-27T00:42:20.170 回答