第一个明显的错误:
使用视图时无法在状态上指定控制器和模板。它们是相互排斥的...
这是因为当状态上没有“视图”但有控制器和模板时,UI-Router 会自动创建“视图”属性并将这些属性拉到“空”视图......
.state('base', {
abstract: true,
templateUrl: 'views/base.html', //Can't do this
views: { // when this is there.
"search": {
templateUrl: "views/search.html"
}
}
})
相反,做:
.state('base', {
abstract: true,
views: {
"": {
templateUrl: 'views/base.html'
},
"search": {
templateUrl: "views/search.html"
}
}
})
第二个问题:
视图定位如何与嵌套视图等一起工作并不是很合逻辑,如果您将自己限制在一个视图中的一个视图中,那么它可能会很好地工作,但是当您开始使用多个命名视图时,这一切都会变得令人困惑......在顶部添加未命名的视图,很多人会迷失......
UI-Router 中视图的工作方式是 UI-Router 中最糟糕的部分......
给定你的例子,我什至不完全确定从你的抽象父状态定位搜索视图的方法......可能是:
.state('base', {
abstract: true,
views: {
"": {
templateUrl: 'views/base.html'
},
"search@base": {
templateUrl: "views/search.html"
}
}
})
如果它甚至可以工作......或者你可以将搜索视图移出base.html,但我猜你将其添加到那里是有原因的。
整个视图概念是我最终写作的最大原因https://github.com/dotJEM/angular-routing https://github.com/dotJEM/angular-routing反而。