[解決済み] angular2 特定の要素に対して手動でクリックイベントを発生させる
2023-05-02 02:26:29
質問
私はプログラム的に要素のクリックイベント(または他のイベント)を発生させようとしています。言い換えれば、私はangular2でjQuery .trigger()メソッドが提供するのと同様の機能を知りたいのです。
これを行うための組み込みのメソッドはありますか?......もしそうでなければ、どうすればいいか提案してください。
次のようなコードを考えてみましょう。
<form [ngFormModel]="imgUploadFrm"
(ngSubmit)="onSubmit(imgUploadFrm)">
<br>
<div class="input-field">
<input type="file" id="imgFile" (click)="onChange($event)" >
</div>
<button id="btnAdd" type="submit" (click)="showImageBrowseDlg()" )>Add Picture</button>
</form>
ここで、ユーザが btnAdd のクリックイベントを発生させる必要があります。 imgFile
どのように解決するのですか?
アンギュラ4
の代わりに
this.renderer.invokeElementMethod(
this.fileInput.nativeElement, 'dispatchEvent', [event]);
使用
this.fileInput.nativeElement.dispatchEvent(event);
なぜなら
invokeElementMethod
はもうレンダラーの一部ではなくなってしまうからです。
アンギュラー2
使用方法
ビュー子
をテンプレート変数と一緒に使って、入力されたファイルへの参照を取得し、それから
レンダラ
を呼び出して
dispatchEvent
を呼び出してイベントを発生させます。
import { Component, Renderer, ElementRef, ViewChild } from '@angular/core';
@Component({
...
template: `
...
<input #fileInput type="file" id="imgFile" (click)="onChange($event)" >
...`
})
class MyComponent {
@ViewChild('fileInput') fileInput:ElementRef;
constructor(private renderer:Renderer) {}
showImageBrowseDlg() {
// from http://stackoverflow.com/a/32010791/217408
let event = new MouseEvent('click', {bubbles: true});
this.renderer.invokeElementMethod(
this.fileInput.nativeElement, 'dispatchEvent', [event]);
}
}
更新
DOMへの直接アクセスはAngularチームによって推奨されなくなったので、よりシンプルなこのコードも使うことができます。
this.fileInput.nativeElement.click()
参照 https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/dispatchEvent
関連
-
[解決済み] ドロップダウンを外部クリックで閉じるには?
-
[解決済み] ng2 - ng-containerタグとng-templateタグの違い
-
[解決済み] タイプスクリプト タイプ X はタイプ Y の length、pop、push、concat、その他 26 のプロパティが欠落しています。[2740]
-
[解決済み] Angularで、コントロールが作成された後、FormControlにバリデータを追加する方法は?
-
[解決済み] angular-cli server - APIリクエストを別のサーバーにプロキシする方法は?
-
[解決済み] 64進数の文字列を角(2+)でエンコードおよびデコードする。
-
[解決済み] Typescriptで文字列をbooleanに変換する方法 Angular 4
-
[解決済み] Angularで確認ダイアログを作る簡単な方法?
-
[解決済み] aria-valuenow' は 'div' の既知のプロパティではないため、バインドできません。
-
[解決済み] APIレスポンスからレスポンスヘッダを読み取る - Angular 5 + TypeScript
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] コンポーネントテンプレートで要素を選択するには?
-
[解決済み] Reactive Forms - フィールドをタッチしたものとしてマークする
-
[解決済み] 子ルートから親ルートに移動するにはどうしたらいいですか?
-
[解決済み] ExpressionChangedAfterItHasBeenCheckedError: チェックされた後に、式が変更されました。以前の値: 'undefined'
-
[解決済み] コンストラクタ注入を行わずにサービスのインスタンスを取得する
-
[解決済み] 角度換算2
-
[解決済み] エラー TS1192: モジュール '" A.module"' はデフォルトのエクスポートがありません。
-
[解決済み] angularで1つの要素に複数のテンプレートバインディングを適用する方法 [重複].
-
[解決済み] Angular2で生のhtmlをバインドする方法 [重複]。
-
[解決済み] Angular2 *ngIf テンプレート内のオブジェクト配列の長さをチェックする