как создать настраиваемую директиву для выбора мата и прослушивания события изменения
В моем проекте необходимо использовать ElementRef
nativeelement.value
из-за некоторых ошибок только для чтения. только моя директива
export class DeliveryAcrossDirective {
@Input('key') key: string;
@Input('component') component: string;
constructor(
private store: Store,
private elementRef: ElementRef<HTMLInputElement>
) {
this.key = '';
this.component = '';
}
@HostListener('change') onChange() {
console.log('noticed something');
this.store.dispatch<IAction<IAdjust>>({
type: RDX_DELIVERY_ACROSS_ADJUST,
payload: {
key: this.key,
value: this.elementRef.nativeElement.value
},
component: this.component
})
}
}
не фиксирует событие изменения из моего выбора коврика
<mat-form-field class="full-width" [@transformRightLeftStateTrigger]="stateDown | async">
<mat-label>
{{ country | async }}
</mat-label>
<mat-select [formControl]="countryFormControl"
appDeliveryAcross
[key]="'iso'"
[component]="'delivery-across'" >
<mat-option *ngFor="let language of (languages | async)" [value]="language.value">
{{ language.country }}
</mat-option>
</mat-select>
</mat-form-field>
в то время как классические входы делают
<mat-form-field class="full-width" [@transformRightLeftStateTrigger]="stateDown | async">
<input matInput
[formControl]="minFormControl"
[errorStateMatcher]="errorStateMatcher"
placeholder="Minimaal"
appDeliveryAcross
[key]="'min'"
[component]="'delivery-across'"
type="number">
</mat-form-field>
Кто-нибудь знает способ, как зафиксировать событие изменения из выбора мата с помощью директивы?
3 ответа
Я не уверен, какую версию Angular Material вы используете, но, вероятно,
change
простое событие не существует для /questions/32208976/uglovoj-6-material-kovrik-vyibran-metod-izmeneniya-udalen/32208978#32208978
Похоже, вы изменили свою директиву для
mat-select
s
Вы должны слушатьselectionChange
событие
@Directive({
selector: '[appMyDirective]',
})
export class MyDirective {
constructor() {}
@HostListener('selectionChange', ['$event'])
onSelectionChange(event: MatSelectChange): void {
console.log(event);
}
}
Для обнаружения изменений
mat-select
тебе не нужно
HostListener
просто подпишитесь
selectionChange
из
MatSelect
export class DeliveryAcrossDirective implements OnInit, OnDestroy {
selectionSub: Subscription;
constructor(
private host: MatSelect
) {
}
ngOnInit(): void {
this.selectionSub = this.host.selectionChange.subscribe(option => {
console.log(option);
// Do something
});
}
ngOnDestroy(): void {
this.selectionSub?.unsubscribe();
}
}