大家好,我是IT修真院深圳分院第06期学员,一枚正直善良的web程序员。
今天给大家分享一下,修真院官网 JS-08任务中可能会使用到的知识点:
1.背景介绍
指令是一个Dom元素上的标签(和元素上的属性, CSS 类样式一样,属于这个Dom元素), 它告诉AngualrJS的 HTML 编译器,去附加一个行为到这个Dom元素上去,这个行为可以改变这个Dom元素,或者这个Dom元素的子元素。
AngularJS 通过被称为 指令 的新属性来扩展 HTML。
AngularJS 通过内置的指令来为应用添加功能。AngularJS 内置指令是扩展的 HTML 属性,带有前缀 ng-。
2.知识剖析
ng-if、ng-class、ng-options、ng-value、ng-click是如何使用的?
ng-if
ng-if指令可以根据表达式的值在DOM中生成或移除一个元素。如果赋值给ng-if的表达式的值是false,那对应的元素将会从DOM中移除,否则生成一个新的元素插入DOM中。
需要注意的是,当一个元素被ng-if从DOM中移除,同它关联的作用域也会被销毁。而且当它重新加入DOM中时,会通过原型继承从它的父作用域生成一个新的作用域。也就是说ng-if会新建作用域,而ng-show和ng-hide则不会。
ng-if同no-show和ng-hide指令最本质的区别是,它不是通过CSS显示或隐藏DOM节点,而是删除或者新增节点。
ng-class
ng-class 指令用于给 HTML 元素动态绑定一个或多个 CSS 类。
ng-class 指令的值可以是字符串,对象,或一个数组。
如果是字符串,多个类名使用空格分隔。
如果是对象,需要使用 key-value 对,key 为你想要添加的类名,value 是一个布尔值。只有在 value 为 true 时类才会被添加。
如果是数组,可以由字符串或对象组合组成,数组的元素可以是字符串或对象。
甚至还可以使用复杂一点三元表达式。
ng-options
ng-options 指令用于使用
ng-value
ng-value 指令用于设置 input 或 select 元素的 value 属性。
和value相比,它的值可以是表达式,所以相比之下可以实现更多需求。
比如当需要使用ng-repeat来动态生成input[]的时候,ng-value是很有用处的。
ng-click
ng-click 指令告诉了 AngularJS HTML 元素被点击后需要执行的操作。
如果是使用ng-click来实现函数的执行的话,还可以进行传参。
一个ng-click可以触发多个操作,比如:
先执行function1后执行function2
3.常见问题
ng-options的用法
4.解决方案
ng-options的用法
ng-options针对不同类型的数据源有不同的用法,主要体现在数组和对象上。简单来说就是它可以接收一个数组或者对象, 并对它们进行循环,将内部的内容提供给select标签内部的选项。它可以是以下两种形式。
1、数组作为数据源
2、对象作为数据源
说明:
array / object: 数据源的类型,有数组和对象两种
value:迭代过程中,引用数组的项或者对象的属性值
key:迭代过程中,引用对象的属性名
label:选项显示的标签,用户可看到的
select:结果绑定到ngModel中,如果没有指定,则默认绑定value
group:group by的条件,表示按某条件进行分组
trackexpr:用于唯一确定数组中的迭代项的表达式
5.编码实战
DEMO
6.扩展思考
ng-if的作用域问题
ng-if指令会创建一个子级作用域,因此,如果在ng-if指令中添加了元素,并向元素属性增加ng-model指令,那么ng-model指令对应的作用域属于子级作用域,而并非控制器注入的$scope作用域对象,这点在进行双向数据绑定时,需要引起注意。
因此,解决ng-if中ng-model值无效的问题,主要方法就是在绑定值时添加parent标识, 或者用ng-show指令代替ng-if指令,这两种方法都可以达到同样的页面效果。 写法如下: ng-model="parent.industry"
7.参考文献
参考文献:
菜鸟教程
AngularJS select中ngOptions用法详解
AngularJS之ng-class(十一)
8.更多讨论
问题1:用angularJS的ng-model绑定到select上,会自动增加一个value为空的option,这是为什么?
答:产生的原因:ng-model没有初始化导致的, 如果ng-model所绑定的变量的值在ng-options绑定的value里面有, 下拉选框中就不会有空白的一项,选中别的数据项以后消失; 如果ng-model所绑定的变量的值不在ng-options绑定的value里面, 下拉选框中就会有空白一项,并且只有当ng-options绑定的value里有对应的text为空行时,这个空行才会一直存在于下拉选项里。
解决办法:
方法一:将select中的一个option设置为空,就可以防止因添加ng-model自动添加空option的问题。
方法二:自己预先添加一个value为空的option,再用ng-if="false"把它去掉。
问题2:ng-repeat或ng-options的track by用处是什么?
答:用ng-repeat指令遍历一个javascript数组,当数组中有重复元素的时候,angularjs会报错,这是因为ng-Repeat不允许collection中存在两个相同Id的对象。
对于数字或者字符串等基本数据类型来说,它的id就是它自身的值。因此数组中是不允许存在两个相同的数字的。为了规避这个错误,需要定义自己的track by表达式。
//业务上自己生成唯一的id
item in items track by item.id
//或者直接拿循环的索引变量index来用 item in items track byindex
如果是javascript对象类型数据,那么就算内容一摸一样,ng-repeat也不会认为这是相同的对象。
我们见到最简单的例子是:
如果item的值有重复的,比如links=["1","1","2","2","3"]
那么angularjs 会报错,不允许值重复,原因是angular需要一个唯一值可以与生成的dom绑定,以便追踪.
然后这时候,track by的用处就体现出来了。
参考资料:ng-repeat指令中使用track by子语句解决重复数据遍历的错误
问题3:ng-options与ng-repeat的区别?
答:ng-options生成的option选项选中后,绑定到ngModel的值可以是对象。ng-repeat绑定到ngModel的值只能是字符串。
select初始化时需要为ngModel指定值,否则会出现空白选项。
视频
PPT
IT修真院欢迎您,邀请码:20152484