在从特定组件导航到另一个组件之前,我想将一些与Angular 2组件相关的数据保存到数据库中,以便数据库保存的数据能够显示在第二个组件上。为了做到这一点,我在第一个组件的ngOnDestroy()钩子上调用了save方法,在第二个组件ngOnInit()上调用了display。
然而,看起来在ngOnDestroy()完全完成之前调用了ngOninit()。这意味着在将数据保存到数据库之前,第二个组件将检索旧数据并进行显示。
请帮我解决这个问题。
您可以为此目的实现CanDeactivate
。只有当Promise
从routerCanDeactivate
返回并解析为true
时,路由器才会继续路由更改
另请参阅https://angular.io/docs/ts/latest/api/#!?apiFilter=烛光激活
rc.x
routerCanDeactivate(currTree?: RouteTree, futureTree?: RouteTree) : Promise<boolean> {
return new Promise<boolean>((resolve, reject) => {
...
})
}
在rc.x中不推荐使用beta版或路由器
routerCanDeactivate(nextInstruction: ComponentInstruction, prevInstruction: ComponentInstruction) {
return new Promise<boolean>((resolve, reject) => {
...
})
}
不推荐使用的路由器也有OnDeactivate
。https://angular.io/docs/ts/latest/api/router-deprecated/index/OnDeactivate-interface.html.这也可能被添加到新的路由器中。
如果您在路由的上下文中,并且您依赖(旧的)路由器,那么您可以使用OnActivate
和OnDeactivate
接口。两者都包含支持promise的方法。
对于routerOnDeactivate
,如果返回promise,则路由更改将等待promise解决。