阻止路由器导航
Preventing router from navigating
如果进行了一些更改,我需要防止路由器被导航到另一个页面(这是通过更改散列来完成的)。尝试使用 HashChanger,但它只会触发 'hashChange' 事件,无法阻止它冒泡。答案可以在 JS-Signals 库中,但不能直接用于用户创建的 SAP 组件。
路由器有停止功能https://sapui5.hana.ondemand.com/#/api/sap.ui.core.routing.Router/methods/stop
如果你调用它,路由器将停止监听 hashchanges。
还有函数isStopped()。
要(重新)激活路由器,请调用 initialize(...)。
可以通过 navigate
事件处理程序中的 event.preventDefault()
阻止导航,而不是完全停止路由器。
<App xmlns="sap.m" navigate=".onNavigate">
onNavigate:函数(事件){
if (/* 待定更改,无授权,<sup>[1]</sup> 等.. */) {
event.preventDefault();
const { isBack, isBackToPage, isBackToTop } = event.getParameters();
常量 isBackNavigation = isBack ||返回页面 ||返回顶部;
window.history.go(isBackNavigation ? 1 : -1);
// 通知用户...
}
}
演示:https://embed.plnkr.co/wp6yes
[1]:如果是因为没有授权导致无法导航,那么只在客户端屏蔽是不行的。服务器首先需要确保没有未经授权的资源被发送到客户端。请参阅 GitHub 上的 response from @matz3。
如果进行了一些更改,我需要防止路由器被导航到另一个页面(这是通过更改散列来完成的)。尝试使用 HashChanger,但它只会触发 'hashChange' 事件,无法阻止它冒泡。答案可以在 JS-Signals 库中,但不能直接用于用户创建的 SAP 组件。
路由器有停止功能https://sapui5.hana.ondemand.com/#/api/sap.ui.core.routing.Router/methods/stop
如果你调用它,路由器将停止监听 hashchanges。
还有函数isStopped()。 要(重新)激活路由器,请调用 initialize(...)。
可以通过 navigate
事件处理程序中的 event.preventDefault()
阻止导航,而不是完全停止路由器。
<App xmlns="sap.m" navigate=".onNavigate">
onNavigate:函数(事件){
if (/* 待定更改,无授权,<sup>[1]</sup> 等.. */) {
event.preventDefault();
const { isBack, isBackToPage, isBackToTop } = event.getParameters();
常量 isBackNavigation = isBack ||返回页面 ||返回顶部;
window.history.go(isBackNavigation ? 1 : -1);
// 通知用户...
}
}
演示:https://embed.plnkr.co/wp6yes
[1]:如果是因为没有授权导致无法导航,那么只在客户端屏蔽是不行的。服务器首先需要确保没有未经授权的资源被发送到客户端。请参阅 GitHub 上的 response from @matz3。