Я написал директиву, которая принимает только числа, реализующие ControlValueAccessor
.компонент с приоритетом приоритета приоритета
onBlur
этого конкретного элемента я бы обновил его модель, как показано ниже.
@HostListener('blur',['$event']) onBlur(event) {
this.directiveModel = this.getOnlyNumberLogic();
this.propagateChange(this.directiveModel); <-- update model
this.renderer.setElementProperty(this.el.nativeElement, 'value', this.directiveModel);
}
выше логика работает отлично, но проблема возникает, когда я добавить (blur)
на HTML компонентного элемента, как показано ниже:
<input type="text" name="number"
#numberId="ngModel"
required
[(ngModel)]="obj.number"
pattern="^\d{11}(?:\d{5})?$"
numberOnly <---- Directive
(blur)="numberId.valid && onNumberBlur(numberId.value)"
maxlength="16"/>
Каждый раз, когда компонента (blur)
выполняет первый, а затем директивы @HostListener('blur')
, потому что из которых [(ngModel)]
не обновляется, поскольку this.propagateChange()
находится внутри директивы blur
, называется позже.
Вопрос:
Есть в любом случае, чтобы установить приоритет размывание этой директивы должен выполнить первый?
Только примечание, пожалуйста, не используйте 'new EventEmitter();' use 'new EventEmitter();' последний более безопасен по типу, а также более легко читается. Много времени люди попадают в ловушку, думая, что, поскольку «--noImplicitAny» хорош, что явные «любые» в порядке. Они - последнее средство. Пожалуйста, не входите в привычку забивать свой код ими, так как это сделает жизнь несчастной для вас и других. –
уверен, что @AluanHaddad благодарит вас за предложение. – yashhy
Извините, я немного разогрелся по этой теме;) –