angularjs 当ngModel 遇上 multi select
一般情况下, $render 只有在ngModel的model value 被更新时会触发
$render通常是自定义指令时才会用到的,这时angular开给我们覆盖的一个接口.
然而,当你使用到ng-options的时候,这个$render angular 会去使用它,当ng-options改变时,$rende也是会触发.
所以如果我们也要使用这个$render的话,我们必须写一个settimeout,再装修$render.
而当 multiple 出现的话就多了一种情况触发$render,当viewValue改变后$digest也是会触发$render,看下面这段代码 :
// we have to do it on each watch since ngModel watches reference, but // we need to work of an array, so we need to see if anything was inserted/removed var lastView, lastViewRef = NaN; scope.$watch(function selectMultipleWatch() { if (lastViewRef === ngModelCtrl.$viewValue && !equals(lastView, ngModelCtrl.$viewValue)) { lastView = shallowCopy(ngModelCtrl.$viewValue); ngModelCtrl.$render(); } lastViewRef = ngModelCtrl.$viewValue; });
所以当我们写指令遇到 select, ngoptions ,$render , multiple 时要多多注意咯 !

浙公网安备 33010602011771号