gpt4 book ai didi

angularjs - 当 ngModel 的 $render 在 AngularJS 中被调用时?

转载 作者:行者123 更新时间:2023-12-03 11:22:13 24 4
gpt4 key购买 nike

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

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

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

$render实际上是叫?

更新

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

最佳答案

$render当模型更改时由 Angular 调用。根据$render docs :

$render()

Called when the view needs to be updated. It is expected that the user of the ng-model directive will implement this method.



看看如何 $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;
});
}];

未调用初始值的原因 是因为指令末尾的这一行:
// load init value from DOM
ctrl.$setViewValue(elm.html());

手动更新 View 值而不触发 ngModelWatch()因此无需通过 $formatters$render .如果该行改为:
scope.content=elm.html();

你会看到 $render由 Angular 调用,因为这会触发 $watch

关于angularjs - 当 ngModel 的 $render 在 AngularJS 中被调用时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21083543/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com