发表于: 2017-07-22 23:30:18

1 841


今天完成的事情:


学习了自定义指令的方法:

*1. $render()

这个方法会在视图需要被更新的时候调用. 比如以下这些场景:

$rollbackViewValue() 被调用. 如果我们把视图值回滚到数据模型的值时,$render()会被调用

ng-model绑定的值被程序改变了,并且$modelValue和$viewValue都和上一次不同了.

由于ng-model没有深度对比模型的变化.什么叫没有深度对比模型的变化: 也就是angular学习笔记(十四)-$watch(1)这里提到的第三个参数ifDeep,ng-model内置的对比机制,相当于这里的ifDeep是false,不进行深度对比.所以$render()只在$modelValue和$viewValue都发生了实际的改变, 才会会被调用.什么叫实际的改变? 就是说,如果$modelValue或者$viewValue是一个对象,而不是一个字符串或者数字,那么,这个对象中的一个属性值发生了变化,这不算真正的变化,因为它对象的引用地址没有发生变化,它指向的还是同一个对象.

 

*2. $isEmpty(value) 

当我们需要判断input的value值是否为空的时候,可以使用这个方法.

value是必须要传的,注意它判断的是value值是否为空,而不是ngModel绑定的那个数据模型的值.其实可以就当它是个判断是否为空的方法,传入一个参数,判断这个参数是否为空,你传入任何值都可以.只是说,一般情况下都会把ngModel绑定的那个值传给它.

你可以自己在指令里重写这个方法,来定义自己所需要的'是否为空'的概念.比如用在一个类型为checkbox的input元素上,因为当checkbox的值为false的时候,$isEmpty()的结果就是empty.

如果值是undefined,null,'',或者NaN,则返回true,否则返回false. 

 

3. $setValidity(validationErrorKey, isValid);

 

4. $setPristine()

把元素设置到原始状态.移除元素的ng-dirty类名,添加ng-pristine类名.

 

5. $setDirty()  

把元素设置到脏值模式.移除元素的ng-pristine类型,添加ng-dirty类名。

 

6.$setUntouched()

把元素设置到没有触碰过的状态.移除ng-touched类名.添加ng-untouched类名.

 

7.$setTouched()

把元素设置到触碰过的状态.移除ng-untouched类名,添加ng-touched类名.

 

8.$rollbackViewValue()

参考:angular-1.3 之ng-model-options指令

 

9.$validate()

 

10.$commitViewValue()

把一个未发生的更新提交给$modelValue.

在使用ng-model-options指令的时候,input元素可能正在等待某个事件的触发,来同步一个将要发生的更新.这个方法很少用,因为ngModelController通常在事件响应中自动处理了这件事.

 

*11.$setViewValue(value, trigger)



明天计划的事情:

完成任务


问题:
暂无



收获:

自定义指令其实就是替换的过程,把html的内容放到一个自己定义的标签中


返回列表 返回列表
评论

    分享到