阻止路由器导航

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