我正在开发一个示例sapui5应用程序,它将另一个sapui5应用程序嵌入作为组件。我已经设法加载组件并显示其根视图内容,但这里出现了路由问题。虽然两个应用程序的路由器(主要和嵌套)分别很好地工作,但我根本无法使它们合作
主应用中定义的manifest.json
中的路由包含:
"config":{
"routerClass":"sap.m.routing.Router",
"viewType":"XML",
"viewPath":"sample.main.view.detailPages",
"controlId":"app",
"controlAggregation":"detailPages",
"clearTarget":false,
"transition":"slide",
"bypassed":{
"target":["home","menu"]
}
},
"routes":[
{
"pattern":"",
"name":"appHome",
"target":["home","menu"]
},
{
"pattern":"ExternalApp",
"name":"externalApp",
"target":["externalApp","menu"]
}],
"targets":{
"home":{
"viewName":"Home",
"viewLevel":1
},
"menu":{
"viewPath":"sample.main.view.masterPages",
"viewName":"menu",
"viewLevel":1,
"controlAggregation":"masterPages"
},
"externalApp":{
"viewName":"ExternalApp",
"viewLevel":2
}
}
为嵌入式应用定义的manifest.json
中的路由包含:
"config":{
"routerClass":"sap.m.routing.Router",
"viewType":"XML",
"viewPath":"some.sample.view",
"controlId":"EmbeddedApp",
"controlAggregation":"pages",
"clearTarget":false,
"transition":"slide",
"bypassed":{
"target":"home"
}
},
"routes":[
{
"name": "home",
"pattern" : "",
"target": "home"
},
{
"name":"toPage2",
"pattern":"page2",
"target":"next"
}
],
"targets":{
"home":{
"viewName": "App",
"viewLevel":1
},
"next":{
"viewName": "Page2",
"viewLevel":2
}
}
当我在主应用中导航到视图时,应用程序的应用程序存在,我正确地看到了根视图(使用网址#/ExternalApp
)。
当我使用navTo("toPage2")
在嵌入式应用程序中导航时,我在控制台中没有错误(因此路由器已正确实现),但我得到#/ExternalApp/page2
而不是获取url hash #/page2
。这导致主应用程序中无法识别的模式并被绕过。
问题是 - 在作为组件嵌入的应用程序内实现路由的正确方法是什么?我想主应用程序manifest.json
应该有一些更改,或者应该将一些其他参数传递给组件,但我找不到任何有用的信息。
EDIT1:
到目前为止我发现的内容 - Route
对象有一个名为parent
的属性,我可以在其中声明容器对象的路径。填充此属性后,外部应用程序的路径模式将自动以适当的父路径为前缀。不是最好的解决方案(外部应用程序仍然需要一些关于容器应用程序的先验信息),但至少在更改的情况下不必手动重写模式。
答案 0 :(得分:0)
如果您希望两台路由器都能正常运行,您可以协调路由模式,例如:
在容器应用中:
"externalApp":{
"viewName":"ExternalApp/:appspecific:",
"viewLevel":2
}
在外部应用中:
"next":{
"viewName": "ExternalApp/Page2",
"viewLevel":2
}