可以使用自定义的表单控件来实现将ngModel双向绑定到Map项的功能。以下是具体步骤:
import { Directive, Input, ElementRef, Renderer2, forwardRef } from '@angular/core'; import { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';
@Directive({ selector: '[mapInput]', providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => MapInputDirective), multi: true } ] }) export class MapInputDirective implements ControlValueAccessor { onChange: any = () => {}; onTouched: any = () => {};
@Input('mapInput') key: string;
@Input() map: Map
constructor(private el: ElementRef, private renderer: Renderer2) { }
writeValue(value: any): void { this.renderer.setProperty(this.el.nativeElement, 'value', this.map.get(this.key)); }
registerOnChange(fn: any): void { this.onChange = fn; }
registerOnTouched(fn: any): void { this.onTouched = fn; }
setDisabledState?(isDisabled: boolean): void { this.renderer.setProperty(this.el.nativeElement, 'disabled', isDisabled); }
onInputChange(value: string) { this.map.set(this.key, value); this.onChange(this.map); } }
import { Component, OnInit } from '@angular/core'; import { FormBuilder, FormGroup } from '@angular/forms';
@Component({
selector: 'app-my-component',
template:
,
})
export class MyComponent implements OnInit {
myMap: Map