Javascript 在ngModel指令中不提供模型名称的情况下,ngModelChange如何工作
Javascript 在ngModel指令中不提供模型名称的情况下,ngModelChange如何工作,javascript,html,angular,angular-ngmodel,angular-ngmodelchange,Javascript,Html,Angular,Angular Ngmodel,Angular Ngmodelchange,ngModelChange()是如何工作的 但我不确定(ngModelChange)它是如何工作的,如果我使用了ngModelChange()事件,即使我没有 ngModelChange中的只是一个事件发射器 @Output('ngModelChange') update = new EventEmitter(); 它在执行ViewTomodeUpdate函数时激发 viewToModelUpdate(newValue: any): void { this.viewModel =
ngModelChange()
是如何工作的
但我不确定(ngModelChange
)它是如何工作的,如果我使用了ngModelChange()
事件,即使我没有
ngModelChange
中的只是一个事件发射器
@Output('ngModelChange') update = new EventEmitter();
它在执行ViewTomodeUpdate函数时激发
viewToModelUpdate(newValue: any): void {
this.viewModel = newValue;
this.update.emit(newValue);
}
ngModel
可以是任何内容,与其他内容没有直接链接。在代码中声明了它,它仅用于名为ngOnChanges
@Input('ngModel') model: any;
我在这里可能是错的,但在我看来,ngModel
不是唯一的真理来源,而是这个。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);
}
{{data.name}
更改(e){
//事件作为参数出现,然后手动查找数据
//通过使用e.target.data
}
还是凭身份证
onChange(标题:string){
警报(标题);
}
您可以尝试将id传递到输入中是的,ngModelChange()不向ngModel提供模型名称
发生这种情况的原因,(ngModelChange)是ngModel指令的@Output。
在输入中插入某个值时,timeemitEvent变为true,默认为false(因此它不会在初始时间触发页面加载)
_this.updateValueAndValidity({emitEvent:false})
您可以在\@angular\forms\esm5\forms.js上找到► 第3850行
如果emitEvent
为true
,则此
更改将导致FormControl
上发出valueChanges
事件。这是默认值
为true(因为它涉及到updateValue和validity
)
如果emitViewToModelChange
为true
,将触发一个ngModelChange事件来更新
模型如果未指定emitViewToModelChange
,这是默认行为
如果emitModelToViewChange
为true
,视图将收到有关新值的通知
通过onChange
事件
现在的问题是,为什么要在$event中得到相同的值,而不是插入到input中的true
,这会导致
FormControl.prototype.setValue=/**
同一文件行编号3911至3919
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;
}
}
<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);
}
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);
};