javascript - 为什么在下拉列表中加载组件时不会触发 ngmodelChange 事件?

标签 javascript angular typescript

在我的 Angular 8 组件中,我向下拉控件添加了双向绑定(bind)。
观点

<select  (ngModelChange)='termSelectChanged($event)' [ngModel]="selected">
  <option [ngValue]="t" *ngFor='let t of termsColl'>{{t?.code}}</option>
</select>
组件代码
export class AppComponent implements OnInit{


     public termsColl : Array<DDModel>;
     public selected : DDModel;
     
      constructor( private s : DDService ){}
      
    termSelectChanged( event  ){    
            alert('HIT');
    }
    
    
      ngOnInit(){
        
        //service call #1
        this.s.getDataForComplexBind().subscribe(  data => {
          this.termsColl = data;
         
        }, error => error );    


        //service call #2
        this.s.getOtherData(  ).subscribe( data => {
          
          //model changes here
          this.selected = this.termsColl[1];
          
        }, error => {  console.error(error);  });

                    
    }

} 
当组件加载时,它会执行 ngOnInit() 并设置模型绑定(bind)属性 Selected数组的第一个元素 termsColl . termsColl有数据,但行 this.selected = this.termsColl[1];不会将所选选项更改为下拉列表中的第一个元素。事实上,当组件加载时,我期待它触发事件 ngModelChange但它也没有触发该事件。我添加了一个 alert()在代码中,但它没有显示组件何时加载。只有当我从下拉列表中选择一个选项时它才会显示。如何更改代码以执行 ngModelChange组件加载时的事件?
这是我的堆栈 Blitz
https://stackblitz.com/edit/angular-version-yeg27j?file=src%2Fapp%2Fapp.component.ts

最佳答案

我更改了 ngModeChange输入 DDModel并调用您的termSelectChanged()从订阅内部。我也改了[ngModel][(ngModel)]

<select  (ngModelChange)='termSelectChanged($event)' [(ngModel)]="selected">
  <option [ngValue]="t" *ngFor='let t of termsColl'>{{t?.code}}</option>
</select>
  termSelectChanged(selection: DDModel) {
    console.log("HIT", selection);
  }

  ngOnInit() {
    this.s.getOtherData().subscribe(
      data => {
        this.termsColl = data;
        this.selected = this.termsColl[0];
        this.termSelectChanged(this.selected);
      },
      error => {
        console.error(error);
      }
    );
  }
我无法告诉你为什么要更改 this.selected来自代码不会触发 ngModelChange .可能是因为ngModelChange在模板中调用。

关于javascript - 为什么在下拉列表中加载组件时不会触发 ngmodelChange 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64779683/

相关文章:

javascript - 如何使用带有 2 个日期选择器的搜索日期范围的数据表使用 yadcf

javascript - 将*所有* javascript 变量(甚至未定义)作为函数参数传递的优缺点是什么?

javascript - setTimeout 不起作用

angular - Angular 2 中的导入接口(interface)

node.js - mongoose.connect 错误 TS2531 : Object is possibly 'null'

javascript - 通过 webpack 构建的 Typescript 在 React 组件中使用 CSS 模块

javascript - Uncaught ReferenceError : Invalid left-hand side in assignment with btn button

javascript - 内联 if 语句不起作用 Angular 5

angular - cdk虚拟卷轴的项目大小

typescript - 我可以在 block 范围内对变量进行类型转换吗?