[TOC]
# 多个命名的视图
可以给ui-view指定名称,这样一个模板中就可以有多个ui-view。假设您有一个应用,需要动态填充graph、table data和filters,像下面这样:
![](https://box.kancloud.cn/1efa42a1c08a9919a34a3ae02a973460_459x362.png)
当您需要使用多视图时,需要用到状态的views属性,views属性值是一个对象。
# 设置views属性将覆盖覆盖的template属性
* 如果在状态中定义了views属性,那么状态中的templateUrl、template 和 templateProvider属性将被忽略。
* 然后views中的每一个 view 都可以设置自身的模板属性(template,templateUrl,templateProvider) 和控制器属性(controller,controllerProvider)。
# 视图名称 - 相对命名与绝对命名【viewname@statename】
* 在定义views属性时,如果视图名称中包含@,那么视图名称就是绝对命名的方式,否则就是相对命名的方式。相对命名的意思是相对于父模板中的ui-view,而绝对命名则指定了相对于哪个状态的模板。
* 在 ui-router 内部,views属性中的每个视图都被按照viewname@statename的方式分配为绝对名称,viewname是目标模板中的ui-view对应的名称,statename是状态的名称,状态名称对应于一个目标模板。@前面部分为空表示未命名的ui-view,@后面为空则表示相对于根模板,通常是 index.html。
~~~
//父路由状态
$stateProvider.state('home', {
templateUrl: basePathProvider.getPath('homeTpl.html'),
resolve: {},
controller: 'homeTplCtrl',
onEnter: function () {
},
onExit: function () {
},
});
//子路由状态
$stateProvider.state('home.list', {
views: {
'nav@home': {
templateUrl: basePathProvider.getPath('homeTplNav.html'),
},
'info@home': {
templateUrl: basePathProvider.getPath('homeTplInfo.html'),
},
'footer@home': {
templateUrl: basePathProvider.getPath('homeTplFooter.html'),
},
}
});
~~~
【homeTpl.html】
~~~
<h1 ui-sref=".list">home</h1>
<!--nav可以显示-->
<div ui-view="nav"></div>
<div ui-view="info"></div>
<div ui-view="footer"></div>
~~~
- Angular简介
- angular1资料网站
- Angular初级部分
- 打破传统的前端
- Angular基本组成部分
- Angular环境搭建
- Angular项目测试
- Angular基础概念
- Angular模块
- Angular控制器
- Angular指令
- Angular表达式
- Angular视图
- Angular基础实战
- Angular模块创建和使用
- Angular控制器和模型创建
- scope对象
- 控制器中调度window对象和document对象
- Angular表达式调度过滤器
- Angular中的ng模块全局方法
- Angular模板应用
- 使用指令复制元素
- 使用指令隐藏显示元素
- Angular指令ng-if
- ng-src和ng-href
- Angular处理样式
- Angular作用域事件传递
- 表单中的元素
- Angular初学者常见的坑
- 再论双向绑定
- Angular中级部分
- Angular路由机制
- ui-router管理状态
- ui-router状态嵌套和视图嵌套
- ui-router多个命名的视图
- ui-router路由控制
- 自定义指令
- 自定义过滤器
- Angular项目目录结构
- Angular服务
- Angular高级部分
- Angular依赖注入
- README