当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
?