加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-17 08:12:05 所属栏目:安全 来源:网络整理
导读:In this official example,以下代码是做什么的? // model - viewctrl.$render = function() { elm.html(ctrl.$viewValue);}; As far as I can see,$ render从不调用。 当$ render被实际调用时? UPDATE 看起来像每次模型改变时调用$ render。但是,当模型
In this official example,以下代码是做什么的?
// model -> view
ctrl.$render = function() {
  elm.html(ctrl.$viewValue);
};

As far as I can see,$ render从不调用。

当$ render被实际调用时?

UPDATE

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

当模型更改时,Right $ 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.

在ngModelWatch中调用$ render是有帮助的(每当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());

手动更新视图值而不触发ngModelWatch(),因此不经过$ formatter或$ render。如果该行代替:

scope.content=elm.html();

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读