我想在将该特定组件导航到另一个组件之前将一些Angular 2组件相关数据保存到数据库,以便数据库保存的数据能够显示在第二个组件上。为了做到这一点,我在第一个组件的 ngOnDestroy()钩子上调用保存方法,在第二个组件 ngOnInit上调用显示方法()
然而,在ngOnDestroy()完成之前,它看起来像是 ngOninit()。这意味着在将数据保存到数据库之前,第二个组件检索旧数据并显示。
请帮我解决此问题。
答案 0 :(得分:2)
如果您处于路由环境中且依赖(旧)路由器,则可以使用OnActivate
和OnDeactivate
接口。两者都包含支持promises的方法。
对于routerOnDeactivate
,如果返回一个承诺,路线变更将等到承诺结算。
答案 1 :(得分:2)
您可以为此目的实施CanDeactivate
。如果从Promise
转发routerCanDeactivate
后退到true
另见https://angular.io/docs/ts/latest/api/#!?apiFilter=candeactivate
<强> rc.x 强>
routerCanDeactivate(currTree?: RouteTree, futureTree?: RouteTree) : Promise<boolean> {
return new Promise<boolean>((resolve, reject) => {
...
})
}
beta.x或路由器 - 在rc.x中弃用
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。这也可能会添加到新路由器中。