如果我确实正确理解了您的目标,那么您就快到了。唯一的调整应该是:
.state('index.sub',{
views: {
// instead of this
// "viewB@index": {
// we need thsi
"viewB@": {
template: "index.viewB"
}
}
})
原因是,我希望您的 ViewA 和 ViewB 都在根级别定义 (index.html)时间>。这就是第一个状态“索引”正常工作的原因,因为它的定义是:
.state('index', {
url: "",
views: {
// this is working
"viewA": {
// and this would be as well
"viewA@": {
template: "index.viewA"
}
}
})
换句话说,我希望两个视图都在根视图内,名称是空字符串。这就是为什么我们可以像这样针对他们两个:
"viewA@": {
"viewB@": {
见:View Names - Relative vs. Absolute Names小引:
在幕后,每个视图都被分配了一个遵循 viewname@statename 方案的绝对名称,其中 viewname 是视图指令中使用的名称,状态名称是状态的绝对名称,例如联系方式。项目。您还可以选择以绝对语法编写视图名称。
例如,前面的例子也可以写成:
.state('report',{
views: {
'filters@': { },
'tabledata@': { },
'graph@': { }
}
})
请注意,视图名称现在指定为绝对名称,而不是相对名称。它的目标是位于根未命名模板中的“filters”、“tabledata”和“graph”视图。由于它未命名,因此“@”后面没有任何内容。未命名的根模板是您的 index.html。
有updated plunker,状态为def:
$urlRouterProvider.otherwise("/index/sub")
$stateProvider
.state('index', {
url: "/index",
views: {
"viewA": {
template: "index.viewA"
}
}
})
.state('index.sub', {
url : "/sub",
views: {
/*
"viewB@index": {
template: "index.viewB"
},
*/
"viewB@": {
template: "index.viewB"
}
}
})
关键是定义 url 或至少正确导航到子状态 index.sub