OJET - 如何在离开我的页面之前提醒用户?
OJET - How do I alert a user before leaving my page?
我正在使用 Oracle JET 开发单页应用程序。在我正在构建的页面中,我试图在用户尝试离开页面而不保存更改时提醒他们。
所以当离开页面时我想:
- 拦截路由。
- 检查是否有任何变化。
- 如果有变化请弹出。
- 如果没有任何未保存的更改,则继续路由。
我相信这应该可以使用 ojRouter (doc link here),但我还没有让它工作。我尝试了很多方法,但这是我到目前为止的结果:
编辑:我已经更进一步并成功访问了 canExit 属性,我在下面编辑了我的代码块。但是,这仍然不会阻止路由。
oj.Router.sync().then(() => {
const letrouterState = oj.Router.rootInstance;
letrouterState.currentState().canExit = ableToExit();
});
function ableToExit() {
let canExit;
//function that will check if the page has unsaved changes
if (ableToExit()) {
canExit = false;
} else {
canExit = true;
}
return canExit;
}
我也试过用window.onhashchange
。但是,这只会在打开我的页面时触发事件,而不会在离开时触发。
我希望我把我的问题说清楚了,如果需要的话,我很乐意澄清我的任何要求。有人可以帮助我吗?感谢您提前抽出时间。
-沃特
由于干预整个路由器成为一个非常混乱的解决方案,我们决定调整要求,不再这样做。感谢任何试图提供帮助的人。这个故事的寓意是不要尝试这个:)。
ModuleViewModel
interface implements the optional canExit
method, which gets invoked on the beforeStateChange
event of ModuleRouterAdapter
。假设您将 ModuleRouterAdapter
与 <oj-module>
结合使用,这相对容易实现,您只需 return 一个 Promise
然后解决或拒绝它。
我正在使用 Oracle JET 开发单页应用程序。在我正在构建的页面中,我试图在用户尝试离开页面而不保存更改时提醒他们。 所以当离开页面时我想:
- 拦截路由。
- 检查是否有任何变化。
- 如果有变化请弹出。
- 如果没有任何未保存的更改,则继续路由。
我相信这应该可以使用 ojRouter (doc link here),但我还没有让它工作。我尝试了很多方法,但这是我到目前为止的结果:
编辑:我已经更进一步并成功访问了 canExit 属性,我在下面编辑了我的代码块。但是,这仍然不会阻止路由。
oj.Router.sync().then(() => {
const letrouterState = oj.Router.rootInstance;
letrouterState.currentState().canExit = ableToExit();
});
function ableToExit() {
let canExit;
//function that will check if the page has unsaved changes
if (ableToExit()) {
canExit = false;
} else {
canExit = true;
}
return canExit;
}
我也试过用window.onhashchange
。但是,这只会在打开我的页面时触发事件,而不会在离开时触发。
我希望我把我的问题说清楚了,如果需要的话,我很乐意澄清我的任何要求。有人可以帮助我吗?感谢您提前抽出时间。
-沃特
由于干预整个路由器成为一个非常混乱的解决方案,我们决定调整要求,不再这样做。感谢任何试图提供帮助的人。这个故事的寓意是不要尝试这个:)。
ModuleViewModel
interface implements the optional canExit
method, which gets invoked on the beforeStateChange
event of ModuleRouterAdapter
。假设您将 ModuleRouterAdapter
与 <oj-module>
结合使用,这相对容易实现,您只需 return 一个 Promise
然后解决或拒绝它。