ui-router
的多个嵌套视图功能非常好 - 您可以轻松地从应用的一个状态跳转到另一个。
有时您可能想要更改网址,但有时不会。我觉得 state 的概念应该与路由分开/可选。
Here's a plunker that shows what I mean.这是ui-router
文档中其中一个掠夺者的分支,下面有两个小的更改:
.state('route1', {
url: "/route", // <---- URL IS SHARED WITH ROUTE2
views: {
"viewA": {
template: "route1.viewA"
},
"viewB": {
template: "route1.viewB"
}
}
})
.state('route2', {
url: "/route", // <---- URL IS SHARED WITH ROUTE1
views: {
"viewA": {
template: "route2.viewA"
},
"viewB": {
template: "route2.viewB"
}
}
})
这似乎有效 - URL保持不变。再次,这里做了多少冗余工作?这是经过批准/测试的用法吗?
如果您可以省略某州的url
,那就太好了。
更新问题:这是经过批准/测试的用法吗?
答案 0 :(得分:41)
您绝对可以拥有没有网址的州。事实上,您的州都不需要网址。这是设计的核心部分。话虽如此,我不会做你上面做的事。
如果您希望两个州拥有相同的网址,请创建一个abstract parent state,为其指定一个网址,并使两个州成为其中的子网(任何一个都没有网址)。
答案 1 :(得分:0)
要添加到其他答案,多个命名视图不使用URL。
来自文档:
如果你定义了一个视图对象,你的状态的templateUrl,模板和 templateProvider将被忽略。所以在你需要的情况下 这些视图的父布局,可以定义一个抽象状态 包含一个模板,以及布局状态下的子状态 包含&#39;观点&#39;对象
使用命名视图的原因是每个模板可以有多个ui-view,换句话说,在单个状态中有多个视图。这条路, 您可以使用路由更改站点的部分,即使URL没有更改,您也可以在不同的模板中重复使用数据,因为它是一个 具有它自己的控制器和视图的组件。
请参阅Angular Routing using ui-router以获得有关示例的深入解释。