在AngularJS中调用ngModel的$ render时?

时间:2014-01-13 03:46:20

标签: angularjs angularjs-directive

In this official example,以下代码在做什么?

// model -> view
ctrl.$render = function() {
  elm.html(ctrl.$viewValue);
};

As far as I can see,永远不会调用$render

实际调用$render时?


更新

每次模型更改时都会调用$render。但是,当模型获得其初始值时,不会调用它。有没有办法控制初始值的渲染?

1 个答案:

答案 0 :(得分:29)

当模型发生变化时,Angular会调用右$render。根据{{​​3}}:

  

$渲染()

     

需要更新视图时调用。预计用户   ng-model指令将实现此方法。

了解$renderngModelWatch的调用方式很有帮助(ngModel更改时会调用$viewValue)。在这里,我们看到$render docs被调用,然后更新$render,最后调用$scope.$watch(function ngModelWatch() { var value = ngModelGet($scope); // if scope model value and ngModel value are out of sync if (ctrl.$modelValue !== value) { var formatters = ctrl.$formatters, idx = formatters.length; ctrl.$modelValue = value; while(idx--) { value = formatters[idx](value); } if (ctrl.$viewValue !== value) { ctrl.$viewValue = value; ctrl.$render(); } } return value; }); }];

// load init value from DOM
ctrl.$setViewValue(elm.html());

没有调用初始值的原因是因为指令末尾的这一行:

ngModelWatch()

手动更新视图值而不触发$formatters,因此无需通过$renderscope.content=elm.html(); 。如果是那条线:

$render

你会看到Angular调用的$watch,因为它会触发{{1}}