【发布时间】:2015-04-12 13:17:50
【问题描述】:
我想要实现的是有 2 个同级视图,其中 1 个运行一次,另一个将得到更新。
我有一个这样的模板:
<body>
<ui-view="header />
<ui-view="body" />
</body>
我有 1 个包罗万象的状态:
.state('root', {
params: { … },
resolve: {
data: fn() { … }
},
url: '/{p1:string}/{p2:string}/{p3:string}',
views: {
header: {
controller: 'HeaderCtrl as Header',
templateUrl: '…'
},
body: {
controllerProvider: fn() { … },
templateUrl: fn() { … }
}
}
});
包罗万象的状态会动态选择适当的控制器、数据和模板。除了 HeaderCtrl 在每次状态更改时都重新执行之外,一切都是笨拙的。我希望它只执行一次。
我尝试创建 2 个状态,root 和 base,其中上述变为 root.base。我将 header 视图移动到新的 root 状态,如下所示:
.state('root', {
abstract: true,
url: '/',
views: {
header: {
controller: 'HeaderCtrl as Header',
templateUrl: '…'
}
}
})
.state('root.base', {
params: { … },
resolve: {
data: fn() { … }
},
url: '/{p1:string}/{p2:string}/{p3:string}',
views: {
body: {
controllerProvider: fn() { … },
templateUrl: fn() { … }
}
}
});
但只有父 (root) 状态参与。
【问题讨论】:
标签: javascript angular-ui-router state composite-view