Mis*_*hko 23 angularjs angularjs-directive
在这个官方示例中,以下代码在做什么?
// model -> view
ctrl.$render = function() {
elm.html(ctrl.$viewValue);
};
Run Code Online (Sandbox Code Playgroud)
据我所见,$render从未被称为.
什么时候$render实际叫?
UPDATE
看起来像$render被称为每次模式的转变.但是,当模型获得其初始值时,不会调用它.有没有办法控制初始值的渲染?
Kay*_*ave 31
$render当模型发生变化时,Angular会调用Right .根据$ render docs:
$渲染()
在需要更新视图时调用.预计ng-model指令的用户将实现此方法.
看看如何$render调用ngModelWatch(每次ngModel更改时调用)都很有帮助.在这里我们看到$formatters调用,然后$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;
});
}];
Run Code Online (Sandbox Code Playgroud)
它没有被调用初始值的原因是因为该指令末尾的这一行:
// load init value from DOM
ctrl.$setViewValue(elm.html());
Run Code Online (Sandbox Code Playgroud)
这会手动更新视图值而不会触发ngModelWatch(),因此无需通过$formatters或$render.如果是那条线:
scope.content=elm.html();
Run Code Online (Sandbox Code Playgroud)
你会看到$renderAngular调用它会触发一个$watch
| 归档时间: |
|
| 查看次数: |
28885 次 |
| 最近记录: |