私は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();' new EventEmitter();を使用しないでください。後者は型の安全性が高く読みやすくなります。 '--noImplicitAny'は明示的な' any'sが大丈夫であることが良いので、多くの時間の人々は思考の罠に陥ります。彼らは最後の手段です。あなたと他の人のために人生を悲惨にしてくれるので、あなたのコードを捨てる習慣に入らないでください。 –
@AluanHaddadがこの提案に感謝します。 – yashhy
申し訳ありませんが、私はその話題に関してちょっと熱くなりました;) –