4
1

More than 3 years have passed since last update.

[Angular] inputタグに指定したchangeイベントで再度同じファイルを選択してもイベントを検知する

Posted at

inputタグにchangeイベントを指定し、ファイルの選択を検知してなにかするよくある処理です。
同じファイルを選択してもイベントの検知をしたい際の解決策となります。

同じファイルを選択してもイベント検知できない例

example.component.html
<input type="file" (change)="changeFile($event)" />
example.component.ts
export class ExampleComponent {
  changeFile($event: Readonly<Event>): void {
    // 処理
  }
}

ファイル選択ダイアログでファイルを選択した後、同じファイルを選択してもchangeイベントは検知できません。

解決策

example.component.html
<input #fileInput type="file" (change)="changeFile($event)" />
example.component.ts
export class ExampleComponent {
  @ViewChild('fileInput') fileInput: ElementRef;

  changeFile($event: Readonly<Event>): void {
    // 処理
    this.fileInput.nativeElement.value = '';
  }
}

ViewChildでrefを取得し、直接valueを初期化することでchangeイベントが同じファイルを選択されても検知できるようになります。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1