ngModelChange 如何在不在 ngModel 指令中提供模型名称的情况下工作
How does ngModelChange works without providing model name in ngModel directive
ngModelChange()
是如何工作的?
但我不确定,(ngModelChange
) 它是如何工作的,如果我使用 ngModelChange()
事件,即使我不是 。
<input #gb type="text" pInputText class="ui-widget ui-text" **ngModel**
(ngModelChange)="functionName($event)">
在Source code中ngModelChange
只是一个事件发射器。
@Output('ngModelChange') update = new EventEmitter();
它在执行 viewToModelUpdate 函数时触发。
viewToModelUpdate(newValue: any): void {
this.viewModel = newValue;
this.update.emit(newValue);
}
ngModel
可以是任何东西,并且没有直接 link 指向任何其他东西。在代码中它被声明并且它只在一个名为 ngOnChanges
的函数中使用
@Input('ngModel') model: any;
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;
}
}
我在这里可能是错的,但在我看来 ngModel
不是唯一的事实来源,但 this.viewModel
似乎是,因此 ngModel
不需要ngModelChange
的值与 ngModel
值分开工作。
希望对您有所帮助。
你在没有 ngModel 的情况下试试
<select (change)="changed($event)">
<option *ngFor="let data of allData" [value]="data.id">
{{data.name}}
</option>
</select>
changed(e){
//event comes as parameter and then find data manually
//by using e.target.data
}
OR BY ID
<inputtype="text" #byid (change)="onChange(byid.value)" />
onChange(title:string){
alert(title);
}
您可以尝试将 id 传递到输入
是的,ngModelChange() 在不向 ngModel 提供模型名称的情况下工作。
发生这种情况的原因,(ngModelChange) 是 ngModel 指令的 @Output。
当在输入中插入一些值时,emitEvent 变为 true,默认情况下为 false(因此它不会在初始时间触发页面加载)。
_this.updateValueAndValidity({ emitEvent: false });
您可以在 \@angular\forms\esm5\forms.js ► 行号 3850
找到
如果emitEvent
是true
,这
更改将导致 FormControl
上的 valueChanges
事件被发出。这默认
为真(因为它下降到 updateValueAndValidity
)。
如果 emitViewToModelChange
为 true
,将触发 ngModelChange 事件以更新
模型。如果未指定 emitViewToModelChange
,则这是默认行为。
如果emitModelToViewChange
是true
,视图将被通知新值
通过 onChange
事件。
现在的问题是,为什么在插入输入而不是 ture
的 $event 中得到相同的值,导致
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
ngModelChange()
是如何工作的?
但我不确定,(ngModelChange
) 它是如何工作的,如果我使用 ngModelChange()
事件,即使我不是
<input #gb type="text" pInputText class="ui-widget ui-text" **ngModel**
(ngModelChange)="functionName($event)">
在Source code中ngModelChange
只是一个事件发射器。
@Output('ngModelChange') update = new EventEmitter();
它在执行 viewToModelUpdate 函数时触发。
viewToModelUpdate(newValue: any): void {
this.viewModel = newValue;
this.update.emit(newValue);
}
ngModel
可以是任何东西,并且没有直接 link 指向任何其他东西。在代码中它被声明并且它只在一个名为 ngOnChanges
@Input('ngModel') model: any;
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;
}
}
我在这里可能是错的,但在我看来 ngModel
不是唯一的事实来源,但 this.viewModel
似乎是,因此 ngModel
不需要ngModelChange
的值与 ngModel
值分开工作。
希望对您有所帮助。
你在没有 ngModel 的情况下试试
<select (change)="changed($event)">
<option *ngFor="let data of allData" [value]="data.id">
{{data.name}}
</option>
</select>
changed(e){
//event comes as parameter and then find data manually
//by using e.target.data
}
OR BY ID
<inputtype="text" #byid (change)="onChange(byid.value)" />
onChange(title:string){
alert(title);
}
您可以尝试将 id 传递到输入
是的,ngModelChange() 在不向 ngModel 提供模型名称的情况下工作。
发生这种情况的原因,(ngModelChange) 是 ngModel 指令的 @Output。 当在输入中插入一些值时,emitEvent 变为 true,默认情况下为 false(因此它不会在初始时间触发页面加载)。
_this.updateValueAndValidity({ emitEvent: false });
您可以在 \@angular\forms\esm5\forms.js ► 行号 3850
找到如果emitEvent
是true
,这
更改将导致 FormControl
上的 valueChanges
事件被发出。这默认
为真(因为它下降到 updateValueAndValidity
)。
如果 emitViewToModelChange
为 true
,将触发 ngModelChange 事件以更新
模型。如果未指定 emitViewToModelChange
,则这是默认行为。
如果emitModelToViewChange
是true
,视图将被通知新值
通过 onChange
事件。
现在的问题是,为什么在插入输入而不是 ture
的 $event 中得到相同的值,导致
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