angular - Angular 7选择选项选择执行两次
问题描述
我有这个模板
<select
[(ngModel)]="currentServer.environment"
class="form-control form-control-sm component-form-control-color"
id="inputGroupSelect01">
<option
*ngFor="let environment of environments"
[ngValue]="environment"
[selected]="myFunction()"
>{{ environment.Name }}
</option>
</select>
如果在我的控制器中 myFunction() 包含 à console.log() 并且如果我的环境数组包含 4 个元素,则 console.log 将执行 8 次。
为什么 ?
解决方案
[(ngModel)]
应该设置selected
选项,你不必使用[selected]
. 如果您正在处理对象比较,则可以使用 提供比较器compareWith
,或使用确切的对象引用作为值:
// Using exact object reference as value
currentServer.environment = environments.filter(e => e.name === 'dev')[0];
// Using custom comparator
<select
[(ngModel)]="currentServer.environment"
[compareWith]="compareFn"
class="form-control form-control-sm component-form-control-color"
id="inputGroupSelect01">
<option
*ngFor="let environment of environments"
[ngValue]="environment"
>{{ environment.Name }}</option
>
</select>
compareFn(c1: any, c2:any): boolean {
return c1 && c2 ? c1.name === c2.name : c1 === c2;
}
推荐阅读
- javascript - Webpack 加载包但不执行代码
- reactjs - 将组件分组以制作子组件
- r - 尝试根据 R df 中的给定对在 excel 单元格中查找值
- c++ - 静态数组成员在上下文中是私有的
- audio - USB 音频小工具驱动程序:如何在主机设备上重命名/定义显示的 UAC1 设备名称
- c++ - 使用 OpenMP 和 drand48_r 优化功能
- sql - 如何使用 sql select 语句从 url 或电子邮件中提取域?
- ibm-midrange - 关于物理/逻辑文件,CPYF 和 CRTDUPOBJ 有什么区别?
- java - 是否可以更新 3.7 eclipse 目标以使用支持 java 11 的 osgi equiknox 实现
- angular - RxJs 和 Angular,我需要从路由中读取两个参数,并且我想使用可管道操作符