1
我寫了一個指令,它只接受實施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);
}
上述邏輯的作品完美,但問題是當我在組件元素的HTML添加(blur)
象下面這樣:
<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();'使用'新的EventEmitter();'後者更安全,更易於閱讀。很多時候人們陷入思考的陷阱 - 因爲'--noImplicitAny'很好,明確的'any's都可以。他們是最後的手段。請不要養成亂拋垃圾的習慣,因爲它會讓你和其他人感到痛苦 –
肯定@AluanHaddad感謝你的建議。 – yashhy
對不起,我對這個話題有些激動;) –