次のフォームフィールドは正常に動作しています。これにより、フィールドに入力して貼り付けたときに、fooObj.expDate
がリアルタイムで正常に更新され、検証が行われることを意味します。私はこれを自分自身に明白にするための事前タグを持っています。角度2のフィールドをプログラムで更新する
<pre>{{fooObj.someDate | json}}</pre>
<div class="form-group inline-form__input">
<label for="someDate">Some Date</label>
<input tabindex="2"
type="tel"
class="form-control"
maxlength="7"
placeholder="MM/YY"
formControlName="someDate"
name="someDate"
[(ngModel)]="fooObj.someDate"
someDate>
</div>
しかし、私はこの分野でそのsomeDate
ディレクティブを持っています。このディレクティブはペースト・イベントをインターセプトします。それは、pasteイベントをキャンセルし、入力のいくつかの空想の書式設定を行い、その後、これを行います:
target.value
は私someDate
フィールドです。値は入力ボックス内でうまく更新されます(入力内の画面上で変化します)。ただし、fooObj.someDate
は更新されず、検証は行われません。例えば。タイムアウトで目標値を設定しても、キー/ペースト/その他のJavaScriptイベントを入力するのと同じ検証/オブジェクトの更新は行われません。
角度docsは、この上で言って多くの有用な必要はありません。
角度アップデートバインディング(したがって画面)アプリは、このようなキーストロークなどの非同期イベントに応答して何かをする場合にのみ。この例のコードは、可能な限り最短のテンプレートステートメントである数字0にkeyupイベントをバインドします。ステートメントは何も役に立たないが、Angularの要求を満たし、Angularが画面を更新するようにする。
このフィールドのディレクティブからフィールドの更新をどのようにトリガーしますか?
編集:コードを使用することによって、コメントに推奨されているように、私は要素にイベントをトリガーしようとしたが、私の要素にここで見つける:How can I trigger an onchange event manually?
は罰金実行しますが、更新するフィールドを強制するものではありません:
また、ここでは、 "正常な"アクションをkeyDownなどとトリガしない合成イベントのアイデアを得ています(私は実際に誤読しているか、またはこのユースケースで間違っていると思っていますが、ペーストイベントを再発行しようとしています):https://www.w3.org/TR/clipboard-apis/#clipboard-event-interfaces
注: 合成イベントにはデフォルトアクションがありません。言い換えれば、上記のスクリプトはペーストイベントを発生させますが、データは実際にドキュメントに貼り付けられることはありません。
あなたはそれに 'input'イベントをトリガしてみましたか? – Meir
@Meir:以前に貼り付けイベントを再発行しようとしました。私はこれが通常のonClick/paste/keyup/whateverと同じ方法をトリガーしない "合成"イベントを作成すると言われました。 (http://stackoverflow.com/questions/40848003/set-preventdefault-back-to-false-on-javascript-event)。私はonChange()を試して、通常のkeyUpイベントを発行するつもりです。 – VSO
また、 'input'イベントを試してください。 – Meir