angular指令心得(ng-model)
在项目中编写指令,常常会依赖其他的指令来实现想要达到的功能,其中最常用到的便是ng-model,它为我们明确了需要绑定的属性,虽然在指令中可以通过通过使用独立作用域的”=”来进行双向绑定,但使用ng-model更能简化指令的传值,符合angular的使用习惯。
指令依赖
angular中编写自定义指令是通过require属性来指定查找依赖指令的controller,并传入link函数中进行调用.
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
所依赖指令的控制器被传入link的第四个参数中,可以依赖多个指令,此时第四个参数则是个数组。
上面是angular调用$formatters的地方,它监控了model值的变化,负责model->view。
实践
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
$@H_403_55@formatters &$@H_403_55@parsers
$@H_403_55@formatters@H_403_55@
上面搭建了一个基本的架子,现在我们通过来通过js改变模型值,在$@H_403_55@formatters里面加入一个格式化方法来显示到页面上。
改动:@H_403_55@
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
这里有个很奇怪的现象,两个绑定model的地方显示的值不一样,这是因为input是从ngModelController中获得的返回值显示出来的,这个值在通过$formatters数组时被我拦截下来,返回了另外一个字符串。
$@H_403_55@parsers@H_403_55@
我们还可以对界面(view)输入后的值进行处理。
改动:@H_403_55@
$@H_403_55@render &$@H_403_55@setViewValue
$render@H_403_55@
有的时候,$@H_403_55@formatters数组里面也许会有不止一个方法,这时候为了保证一个最终的显示效果,就应该用到$@H_403_55@render方法。
TIP:$@H_403_55@render总会在$@H_403_55@formatters完成之后调用。@H_403_55@
改动:@H_403_55@
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
结果可以看到,颜色成功改变了,但是输入框没有变化。
造成这个的原因是因为我们重写了$render方法,相当于改写了ng-model从model到view的dom操作,用自己的方式去实现@H_403_55@。
$@H_403_55@setViewValue@H_403_55@
的作用是为了在指令中改变ng-model绑定的值,适用于使用了独立作用域的指令(在没有双向绑定属性的情况下,无法通过scope进行赋值@H_403_55@)。
下面在加载自执行的时候通过指令改变模型值。
改动:@H_403_55@
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
总结
在指令中,我们可以用通过简单的依赖ng-model去实现angular各种其他插件的兼容(如一些日期控件,富文本编辑器等),更能简化我们的指令代码,避免很多复杂的绑定逻辑,特别要注意的是$@H_403_55@formatters,$@H_403_55@passers,$@H_403_55@render这些都会在初始化时去执行一遍,因此应该根据需要做好判断操@H_403_55@
转@H_403_55@http://blog.csdn.net/qq_17371033/article/details/49248791