【发布时间】:2017-10-16 19:37:03
【问题描述】:
我想拥有一个包含所有常见视图(如标题和侧边栏)的通用状态,以及一个模板,我想在其中加载不同的视图,这些视图可以在状态变化时发生变化。
我有一个这样的索引 HTML 文件:
...
<div ui-view="header"></div>
<div ui-view="sidebar"></div>
<div class="container">
<div class="wrapper">
<div ui-view="content"></div>
</div>
</div>
...
虽然 AngularJS 的配置是这样的:
$stateProvider
.state('mainCommonState', {
url: '',
abstract: true,
views: {
header: {
templateUrl: 'app/common/header.html',
controller: 'headerCtrl',
controllerAs: 'vm'
},
sidebar: {
templateUrl: 'app/common/sidebar.html',
controller: 'sidebarCtrl',
controllerAs: 'vm'
},
content: {}
},
resolve: {
apiEnvironment: function ($q, environmentApiService) {
var deferred = $q.defer();
deferred.resolve(environmentApiService.getApiEnvironment());
return deferred.promise;
}
}
})
.state('first-page-content', {
url: '/first-page-content',
parent: 'mainCommonState',
views: {
content: {
templateUrl: 'app/components/first-page-content.html'
controller: 'firstPageCtrl',
controllerAs: 'vm'
}
}
})
.state('second-page-content', {
url: '/second-page-content',
parent: 'mainCommonState',
views: {
content: {
templateUrl: 'app/components/second-page-content.html'
controller: 'secondPageCtrl',
controllerAs: 'vm'
}
}
})
.state('third-page-content', {
url: '/third-page-content',
parent: 'mainCommonState',
views: {
content: {
templateUrl: 'app/components/third-page-content.html'
controller: 'thirdPageCtrl',
controllerAs: 'vm'
}
}
})
由于某种原因,这不起作用:我有一个空视图,而不是我想在内容 ui-view 中显示的 3 个模板。
如果我在抽象状态中定义一个模板(甚至是空白模板),则始终显示的视图是抽象状态mainCommonState中的视图。
我哪里错了?
第一次编辑:在第一个答案之后更新
根据 Chris T 的建议,我更新了我的代码,但仍然缺少一些东西。
我创建了一个Plunker,因此您可以帮助我解决问题。
第二次编辑
根据 Chris T 的建议,我使用 content 视图的绝对路径更新了代码,现在内容切换正确。
我已经相应地更新了Plunker 并引入了新级别的嵌套视图(第一页中的选项卡),我希望在加载第一页内容时激活第一个选项卡。
如果我关注these solutions 并将第一页的 url 设置为空并将其设置为第一个选项卡,则此方法不起作用。
有什么建议吗?
【问题讨论】:
标签: javascript angularjs angular-ui-router