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 时要多多注意咯 ! 

 

posted @ 2015-10-03 16:49  兴杰  阅读(244)  评论(0)    收藏  举报