当ngModel';s$render在AngularJS中调用?

当ngModel';s$render在AngularJS中调用?,angularjs,angularjs-directive,Angularjs,Angularjs Directive,,下面的代码在做什么 // model -> view ctrl.$render = function() { elm.html(ctrl.$viewValue); }; ,$render从未被调用 何时实际调用$render 更新 看起来每次模型更改时都会调用$render。但是,当模型获得其初始值时,不会调用它。是否有方法控制初始值的渲染?右$render在模型更改时由Angular调用。根据报告: $render() 需要更新视图时调用。预计用户 ng model指令的一部分

,下面的代码在做什么

// model -> view
ctrl.$render = function() {
  elm.html(ctrl.$viewValue);
};
$render
从未被调用

何时实际调用
$render


更新


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

$render
在模型更改时由Angular调用。根据报告:

$render()

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

查看如何在
ngModelWatch
中调用
$render
(只要
ngModel
发生更改,就会调用该函数),这会很有帮助。这里我们看到调用,然后更新
$viewValue
,最后调用
$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
$render
。如果该行为:

scope.content=elm.html();

您将看到Angular调用的
$render
,因为这将触发
$watch

,感谢您的详细解释!请您解释一下为什么在模型更改时不调用in
$render