我正在使用UI-Router,需要在另一个视图中使用子视图。我需要渲染"所有者"查看" dog"视图。以下是为此目的而工作的:
UI-Router配置如下
.state('dogAbstract', {
url: '/dog/:dogId',
abstract: true,
templateUrl: 'client/dogs/views/dog.ng.html',
controller: 'dogCtrl',
})
.state('dog', {
url: "",
parent: "dogAbstract",
views: {
"owner": {
templateUrl: 'client/owners/views/owner.ng.html',
controller: 'ownerCtrl'
}
}
})
.state('dogsList', {
url: '/dogs',
templateUrl: 'client/moves/views/dogs-list.ng.html',
controller: 'dogsListCtrl',
})
问题是网址结构不是最理想的。目前要访问特定的狗#34;你必须去/dog/dogId
。但是,我希望它是/dogs/dogId
,因为使用标准REST原则会更好。不幸的是,当我改变了'dogAbstract' url to /dogs
,它与" dogsList"页面,我只能有一个或另一个。
有没有办法让它工作,以便我可以在/dogs
找到列表并在/dogs/dogId
查看个别狗?
答案 0 :(得分:1)
重点是改变定义的顺序:
首先是不太具体的网址,最后更详细的
因为UI-Router使用状态声明的顺序来设置优先级。首先匹配 - 使用:
// if /dogs is url, this will match
.state('dogsList', {
url: '/dogs',
...
})
// if /dogs + something e.g. /dogs/1 - this ONLY will fit
.state('dogAbstract', {
url: '/dogs/:dogId',
...
})
检查行动here