2

我正在查看NgModel的源代码。我了解其中的大部分内容,除了它如何设置value输入的初始值。

NgModel extends NgControl

..

NgControl extends NgControlDirective

..

NgControlDirective有这个代码:

get value(): any { return this.control ? this.control.value : null; }

所以如果我们设置this.control.value它会自动设置为valueof input。好的。

this.control.setValue仅在更新时完成NgModel

它如何知道最初设置该值。

我猜它与

this.valueAccessor = selectValueAccessor(this, valueAccessors);
4

1 回答 1

4

假设我们有以下模板

<input type="text" [ngModel]="x">

在组件类中

x = 3;

当根据生命周期钩子初始化指令时,文档 ngOnChange钩子用currentValue3调用

ngOnChanges(changes: SimpleChanges) {
  this._checkForErrors();
  if (!this._registered) this._setUpControl();
  if ('isDisabled' in changes) {
    this._updateDisabled(changes);
  }

  if (isPropertyUpdated(changes, this.viewModel)) {
    this._updateValue(this.model);
    this.viewModel = this.model;
  }
}

由于将调用previousValueequals方法。undefined this._updateValue(this.model);

private _updateValue(value: any): void {
  resolvedPromise.then(
      () => { this.control.setValue(value, {emitViewToModelChange: false}); });
}

将在哪里this.control.setValue调用。

在此处输入图像描述

于 2017-06-18T06:08:52.240 回答