是的,ngModelChange() 无需向 ngModel 提供模型名称即可工作。
发生这种情况的原因,(ngModelChange) 是 ngModel 指令的 @Output。当在输入中插入某个值时,emitEvent 变为 true,默认为 false(因此它不会在初始时间触发页面加载)。
_this.updateValueAndValidity({ emitEvent: false });
您可以在 \@angular\forms\esm5\forms.js 找到 ► 第 3850 行
如果emitEvent
是true
,则此更改将导致发出valueChanges
事件FormControl
。这默认为 true (因为它下降到updateValueAndValidity
)。
如果emitViewToModelChange
是true
,将触发 ngModelChange 事件来更新模型。emitViewToModelChange
如果未指定,这是默认行为。
如果emitModelToViewChange
是true
,视图将通过事件通知新值onChange
。
现在的问题是,为什么在 $event 中获得相同的值,它被插入到 input 而不是ture
,这导致
FormControl.prototype.setValue = /**
function (value, options) {
var _this = this;
if (options === void 0) { options = {}; }
(/** @type {?} */ (this)).value = this._pendingValue = value;
if (this._onChange.length && options.emitModelToViewChange !== false) {
this._onChange.forEach(function (changeFn) { return changeFn(_this.value, options.emitViewToModelChange !== false); });
}
this.updateValueAndValidity(options);
};
相同的文件行号 3911 到 3919