检测从命名路由器出口中的组件返回的导航
Detect navigation back from component in named router outlet
我在路由器插座中显示一个 A 组件,在这个里面我有另一个 B 组件,它有一个命名的路由器插座,我在其中显示另一个 C 组件。
Router-outlet
A Component
B Component
Named Router-outlet
C Component
在这个 C 组件 中,我执行了验证,在此之后,我想返回到 A 组件 重新加载它(执行 ngOnInit 或任何方法)。
我尝试过使用不同的方法,例如导航、navigateByUrl 和 Location.back()。问题是 A Component 从未被销毁,因此它从未执行过 ngOnInit 方法。
有人知道我该如何解决这个问题吗?谢谢!
我不太确定您将如何能够再次执行 ngOnInit,但解决方法可能是订阅路由器事件(如 所述)并在其中执行您想要的代码.
您可以创建一个服务来处理这种特定情况
export class RefreshService{
private refreshMessage = new BehaviorSubject<any>(null);
refreshObservable = this.refreshMessage.asObservable();
sendRefreshMessage() {
this.refreshMessage.next("");
}
}
在组件 A 中,我订阅了我的 observable
export class AComponent implements OnInit {
constructor(private refreshService: RefreshService) { }
ngOnInit() {
this.refreshService.subscribe(res => { do stuff here } );
}
}
在执行验证后的组件 C 中:
this.refreshService.sendRefreshMessage();
这将触发您在组件 A 中的订阅,然后将执行订阅中的所有代码
我在路由器插座中显示一个 A 组件,在这个里面我有另一个 B 组件,它有一个命名的路由器插座,我在其中显示另一个 C 组件。
Router-outlet
A Component
B Component
Named Router-outlet
C Component
在这个 C 组件 中,我执行了验证,在此之后,我想返回到 A 组件 重新加载它(执行 ngOnInit 或任何方法)。
我尝试过使用不同的方法,例如导航、navigateByUrl 和 Location.back()。问题是 A Component 从未被销毁,因此它从未执行过 ngOnInit 方法。
有人知道我该如何解决这个问题吗?谢谢!
我不太确定您将如何能够再次执行 ngOnInit,但解决方法可能是订阅路由器事件(如
您可以创建一个服务来处理这种特定情况
export class RefreshService{
private refreshMessage = new BehaviorSubject<any>(null);
refreshObservable = this.refreshMessage.asObservable();
sendRefreshMessage() {
this.refreshMessage.next("");
}
}
在组件 A 中,我订阅了我的 observable
export class AComponent implements OnInit {
constructor(private refreshService: RefreshService) { }
ngOnInit() {
this.refreshService.subscribe(res => { do stuff here } );
}
}
在执行验证后的组件 C 中:
this.refreshService.sendRefreshMessage();
这将触发您在组件 A 中的订阅,然后将执行订阅中的所有代码