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);
    };