我正在try 以编程方式在元素上触发单击事件(或任何其他事件),换句话说,我想知道与angular2中的jQuery.rigger()方法提供的类似功能.

有没有内置的方法可以做到这一点呢?如果没有,请建议我如何做到这一点

考虑下面的代码片段

<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上触发点击事件

推荐答案

Angular4

而不是

    this.renderer.invokeElementMethod(
        this.fileInput.nativeElement, 'dispatchEvent', [event]);

使用

    this.fileInput.nativeElement.dispatchEvent(event);

beca使用 invokeElementMethod won't be part of the renderer anymore.

Angular2

Use ViewChild with a template variable to get a reference to the file input, then 使用 the Renderer to invoke dispatchEvent to fire the event:

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 Mo使用Event('click', {bubbles: true});
    this.renderer.invokeElementMethod(
        this.fileInput.nativeElement, 'dispatchEvent', [event]);
  }
}

Update

Since direct DOM access isn't discouraged anymore by the Angular team this simpler code can be 使用d as well

this.fileInput.nativeElement.click()

另见第https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/dispatchEvent

Angular相关问答推荐

如何在自定义验证器中获取所有表单控件(字段组动态创建)

Angular 服务错误处理响应类型=BLOB

具有多重签名的Angular Mocking Service

未触发HTTP拦截器

更改动态表单控制Angular 的值

我正在try 将一个带有模块联盟的Angular 8项目expose 到另一个Angular 项目,Angular 是15,这可能吗?如果是这样,有什么建议吗?

Angular 应用程序未在Azure应用程序服务中运行

从 applescript 调用Angular 前端以从列表中 Select 一个项目

Angular 15:在范围内提供相同标记时附加到提供的值

Angular 测试被认为是成功的,即使有错误

如何使用指令以Angular 传递默认值

异步管道模板中的局部变量(Angular 2+)

Angular 2:Validators.pattern() 不工作

ng test 和 ng e2e 之间的真正区别是什么

Angular ngFor 索引从 1 开始 循环

Angular2 Pipes:输出原始 HTML

使用 Angular 2 新路由更改页面标题

如何处理Angular2中的查询参数

如何在 Angular 4 中翻译 mat-paginator?

如果不判断 {{object.field}} 是否存在则出错