我正在使用AngularJS和Angular UI-Router。
ui-view
。ui-view
,每个状态都有视图。尝试图表:
Parent: <ui-view>
filled by
Child: <ui-view> <ui-view> <ui-view>
filled filled filled
我有一个名为category-details
的州。在这个抽象状态的视图中,我有一个未命名的ui-view
。在两个子状态之一(category-details.selected
)中,我想使用multiple named views。
这是抽象的状态。非常基础,但包含在内供您参考。
.state('category-details', {
abstract: true,
data: {
pageTitle: 'Category Details'
},
templateUrl: "views/category-details.html",
})
在category-details.selected
状态(具有多个命名视图的州)中,我将ui-view
的未命名category-details.html
设置为category-details-selected.html
:
.state('category-details.selected', {
views: {
'': {
templateUrl: 'views/category-details-selected.html',
controller: 'CategoryDetailsSelectedCtrl'
}
}
})
在category-details-selected.html
视图的内部,我有三个名为ui-views
:
<div ui-view="firstNamedView"></div>
<div ui-view="secondNamedView"></div>
<div ui-view="thirdNamedView"></div>
最后,我定义了一个设置这三个ui-view
的状态,以满足我想要的行为的第三部分:
.state('category-details.selected.aspect', {
url:"/category-details/:selectedCategory",
views: {
'firstNamedView': {
templateUrl: 'views/first-named-view.html',
controller: 'FirstNamedViewCtrl'
},
'secondNamedView': {
templateUrl: 'views/second-named-view.html',
controller: 'SecondNamedViewCtrl'
},
'thirdNamedView': {
templateUrl: 'views/third-named-view.html',
controller: 'ThirdNamedViewCtrl'
}
}
});
添加category-details.selected.aspect
状态以设置ui-view
视图的常量元素(三个category-details-selected
)是不必要的。每次我想要多个命名视图时,它都会强制创建一个额外的状态。
我相信我应该能够将category-details.selected.aspect
状态的网址和视图移动到其父状态(views
)的category-details.selected
组件中。这看起来像是:
.state('category-details.selected', {
url:"/category-details/:selectedCategory",
views: {
'': {
templateUrl: 'views/category-details-selected.html',
controller: 'CategoryDetailsSelectedCtrl'
},
'firstNamedView': {
templateUrl: 'views/first-named-view.html',
controller: 'FirstNamedViewCtrl'
},
'secondNamedView': {
templateUrl: 'views/second-named-view.html',
controller: 'SecondNamedViewCtrl'
},
'thirdNamedView': {
templateUrl: 'views/third-named-view.html',
controller: 'ThirdNamedViewCtrl'
}
}
})
这导致未命名的ui-view
被正确设置,但是三个名为ui-view
的未填充。
由于选择了三个名为ui-view
的问题,我接着尝试使用absolute selectors
described here来选择它们。这并没有解决问题。我试过了:
firstNamedView
firstNamedView@
firstNamedView@category-details.selected
(others of course)
我想象的是可能的,是另一种更好的方式,还是我目前最好的方法?归结为分配同时设置的父ui-view
的子ui-view
。我认为最后一句话太孤独了,所以我把整个例子都包括在内。
如果我能提供更多的说明,请告诉我。谢谢。