एक और समाधान कस्टम निर्देश है, जो <option>
सूची में परिवर्तन करने के लिए सुनो और यदि किसी का चयन नहीं पहले आइटम का चयन करेंगे।
import { AfterViewInit, Directive, ElementRef, Renderer2 } from '@angular/core';
@Directive({
selector: '[mySelectFirstOption]'
})
export class SelectFirstOptionDirective implements AfterViewInit {
private observer: MutationObserver;
constructor(
private elementRef: ElementRef,
private renderer: Renderer2) {
if ((elementRef.nativeElement.tagName || '').toLowerCase() !== 'select') {
throw new Error('mySelectFirstOption directive can only be applied to <select> elements');
}
}
ngAfterViewInit() {
setTimeout(() => this.trySelectFirstOption(), 0);
this.observer = new MutationObserver(mutations => this.trySelectFirstOption());
const config: MutationObserverInit = { childList: true };
this.observer.observe(this.elementRef.nativeElement, config);
}
private trySelectFirstOption() {
const nativeElement = this.elementRef.nativeElement;
if (nativeElement.options.length > 0 && nativeElement.selectedIndex === -1) {
this.renderer.setProperty(nativeElement, 'value', nativeElement.options[0].value);
nativeElement.dispatchEvent(new Event('change'));
}
}
}
और फिर आप यह <select>
तत्व के साथ इस तरह का उपयोग कर सकते हैं:
<select ... mySelectFirstOption>
स्रोत
2017-10-06 07:43:08
एंगुलर 4.4.4 और मॉडल संचालित फॉर्म के साथ काम नहीं करना प्रतीत होता है। –