本文共 5852 字,大约阅读时间需要 19 分钟。
本节书摘来自华章出版社《AngularJS实战》一 书中的第2章,第2.3节,作者:陶国荣,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
Angular自身提供了一整套完整的模板系统,配合$scope对象和数据双向绑定机制,将页面纯静态元素经过行为、属性的添加和格式的转换,最终变成在浏览器中显示的动态页。
在模板系统中,可以包含Angular的指令、数据绑定、表单控件和过滤器,同时,在处理复杂程序时,可以构建多个模板页面作用于视图层。在主页中,再通过包含(include)的方式加载这些零散的模板页。这样做的好处在于,一次定义可多处调用,增加代码的重复使用,减少维护成本。构建模板的内容是使用模板功能的前提,一般通过下列几种方式来实现。
直接在页面中添加元素和Angular指令,依赖控制器中构建的属性和方式绑定模板中的元素内容和事件,实现应用需求。通过“type”类型为“text/ng-template”的构建模板内容
(3)页面效果
执行HTML文件2-9.html,最终实现的页面效果如图2-9所示。(4)源码分析
在本示例的源码中,先添加一个“type”类型为“text/ng-template”的在构建模板内容的过程中,有时需要反复将不同的数据加载到一个元素中,例如,通过
元素绑定一个数组的各成员。此时,可以使用“ng-repeat”指令,它的功能是根据绑定数组成员的数量,复制页面中被绑定的元素,并在复制过程中添加元素相应的属性和方法,通过这种方式,实现数组数据与元素绑定的过程。 在使用“ng-repeat”指令复制元素的过程中,还提供了几个非常实用的专有变量,可以通过这些变量来处理显示数据时的各种状态。这些变量的功能分别如下。 $f?irst,该变量表示记录是否是首条,如果是则返回true,否则返回false。 $last,该变量表示记录是否是尾条,如果是则返回true,否则返回false。 $middle,该变量表示记录是否是中间条,如果是则返回true,否则返回false。 $index,该变量表示记录的索引号,其对应的值从0开始。 接下来,通过一个示例来演示使用“ng-repeat”指令复制元素的过程。 示例2-10 使用指令复制元素 (1)功能描述 在页面中,通过元素显示一个数组中的全部成员数据,并且在显示数据时列出当条记录是否为“首条”和“尾条”记录的状态信息。 (2)实现代码 新建一个HTML文件2-10.html,加入如代码清单2-10所示的代码。 代码清单2-10 使用指令复制元素使用指令复制元素
- 序号 姓名 性别 是否首条 是否尾条
- { {$index+1}} { {stu.name}} { {stu.sex}} { {$f?irst?'是':'否'}} { {$last?'是':'否'}}
(3)页面效果
执行HTML文件2-10.html,最终实现的页面效果如图2-10所示。(4)源码分析
在本示例的源码中,首先,在对应页面的控制器代码中,以$scope属性的方式添加了一个名为“data”的数组,用作页面中元素绑定的数据源;然后,在页面中添加在Angular中,添加元素的样式也非常简单,概括起来可以通过下列几种方式来进行。
(1)直接绑定值为CSS类别名称的$scope对象属性这种方式的操作非常简单,先在控制器中添加一个值为CSS类别名称的属性,然后在页面元素的class或ng-class属性值中,通过双花括号方式绑定属性名即可,如以下代码。$scope.red="red";
上述代码表示在控制器中添加了一个名为“red”的属性,它的属性值是名为“red”的CSS类别名。在添加完“red”属性后,在页面中可以通过下列代码进行调用。
等价于下列代码:
这种方式操作起来虽然简单,但在控制器中定义CSS类别名称,并不是Angular所提倡的,我们在开发Angular应用时,尽量保证控制器的代码都是处理业务逻辑,并不涉及页面元素。
(2)以字符串数组方式选择性添加CSS类别名称这种方式将根据控制器中一个布尔类型的属性值来决定页面中元素添加的CSS样式名,当该属性值为true时,添加一个CSS样式名,当属性值为false值时,添加另外一个CSS样式名。下列代码添加一个名为“blnfocus”属性,由它决定页面中$scope.blnfocus=true;
接下来在页面的
在上述代码中,
$scope.a=false;$scope.b=true;
接下来在页面的
在上述ng-class属性值设置过程中,样式名“red”和“green”分别为“key”值,属性值“a”和“b”分别为对应的“value”值。当“value”属性值为true时,则添加对应的“key”即CSS样式名。因此,这种方式可以实现添加多种CSS样式名称,适合在处理复杂样式时使用。
此外,在Angular中,还有另外两个用于添加样式的页面指令,分别为“ng-class-odd”和“ng-class-even”,这两个样式指令是专用于以列表方式显示数据,对应奇数行与偶数行的样式。接下来,通过一个完整的示例来详细介绍样式在页面中的使用。示例2-11 添加元素样式(1)功能描述在示例2-10的基础之上,在样式方面增加3个功能。首先,将第一个添加元素样式
- 序号 姓名 性别 是否首条 是否尾条
- { {$index+1}} { {stu.name}} { {stu.sex}} { {$f?irst?'是':'否'}} { {$last?'是':'否'}}
(3)页面效果
执行HTML文件2-11.html,最终实现的页面效果如图2-11所示。(4)源码分析
在本示例的源代码中,首次定义了名称为“odd”、“even”、“bold”和“focus”的4个样式,分别用于隔行时的两种字体色、标题栏字体变粗和单击某行时的背景色。其次,在示例的控制器代码中,除添加“data”数组集合外,再添加了一个“bold”属性,用于指定加粗显示字体时的样式名。另外,还添加了一个带参数的“li_click”方法,当调用该方法时,将“focus”属性值设为传入参数值。再有,在示例的页面代码中,先通过双花括号方式将第一个在Angular中,可以通过“ng-show”“ng-hide”和“ng-switch”指令来控制元素隐藏与显示的状态,前两个指令直接控制元素的显示和隐藏状态,当“ng-show”值为true或“ng-hide”值为false时,元素显示,反之,元素隐藏。
后一个“ng-switch”指令的功能是显示匹配成功的元素,该指令需要结合“ng-switch-when”和“ng-switch-defalut”指令使用。在“ng-switch”指令中,当指定的“on”值与某个或多个添加“ng-switch-when”指令的元素匹配时,这些元素显示,其他未匹配的元素则隐藏。如果没有找到与“on”值相匹配的元素时,则显示添加了“ng-switch-defalut”指令的元素。接下来,通过一个示例来演示控制元素隐藏或显示状态的过程。示例2-12 控制元素的隐藏与显示状态(1)功能描述在页面中,调用“ng-show”“ng-hide”和“ng-switch”指令绑定$scope对象的属性值,控制控制元素显示和隐藏的状态 陶国荣tao_guo_rong@163.com
- 陶国荣
- tao_guo_rong@163.com
- 更多...
(3)页面效果
执行HTML文件2-12.html,最终实现的页面效果如图2-12所示。(4)源码分析
在本示例的源代码中,前两个转载地址:http://kirel.baihongyu.com/