我在 Angular 中创建了一个自定义控件,比如my-select-input ,它包装了原生选择输入。模板看起来像这样。
<div class="select-container">
<select
class="form-control"
[ngModel]="value"
(ngModelChange)="value$.next($event)">
<ng-content></ng-content>
</select>
</div>
我的选择输入组件看起来像这样。
ngOnInit() {
this.value$ = new BehaviorSubject(this._value);
this.valueSubscription = this.value$.subscribe((value) => {
this._value = value;
this.onChangeCallback(this._value);
});
}
组件还扩展了一个实现 controlvalueaccessor 的类。
当我尝试使用这样的组件时:
<my-select-input formControlName="select">
<option *ngFor="let item of selectValues" [ngValue]="item">{{item.label}}</option>
</my-select-input>
ngValue 被完全忽略,我得到的值是选项标签之间的文本。我使用 ngValue 在其中存储一个对象。不知道这里有什么问题。任何帮助表示赞赏。
控制使用 value 属性而不是 ngValue 可以很好地工作。