如何覆盖路由,重定向到UI5中的另一个视图? [英] How to override the routing and redirect to another view in UI5?
本文介绍了如何覆盖路由,重定向到UI5中的另一个视图?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
给出了基于Shop Administration Tool的简化示例应用程序。在视图之间使用侧边栏导航时,我只显示不同的视图,例如View#1、View#2等。这些视图都是独立的视图,每个视图都有自己的XML模板和JS控制器。
现在,我要为每个视图添加权限检查,如果用户没有权限,则应将其重定向到主视图,而不是所需的视图。
我已经实现了导航前检查:
router.attachRoutePatternMatched(async (event) => {
const targetView = event.getParameters().view.getProperty("viewName");
const isPermitttedToSeeView = await this.checkUserPermission(targetView);
if (!isPermitttedToSeeView) {
MessageToast.show("Sorry, you don't have permissions.");
router.navTo("mainView");
}
}, this);
此代码可以工作,但问题是在没有权限的情况下,用户首先看到MessageToast
消息(OK),然后被重定向到禁用视图(BAD),然后立即重定向到mainView
视图(OK)。
我尝试使用attachBeforeRouteMatched
,希望在这种情况下还没有执行路由,如果需要,我可以重定向用户,并且用户不会看到禁止的视图。但没有,我仍然看到禁用视图一秒钟,然后被重定向到mainView
。
mainView
视图?换句话说,如何更改路由导航管道?
推荐答案
可能的解决方法是使用«硬»重定向而不是路由:
mLibrary.URLHelper.redirect("%desiredURL%", false);
其中mLibrary
在sap.ui.define
通过"sap/m/library"
定义。
这将丢弃任何正在进行的路由,并将强制(就UX而言,而不是就安全性而言)将用户重定向到所需的URL。
从性能角度看,这可能不是最佳解决方案,因为它可能会导致不需要的呈现,但这是我发现的防止用户被路由到不需要的视图的唯一方法。
这篇关于如何覆盖路由,重定向到UI5中的另一个视图?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文