Angular4.x Event (DOM事件和自定义事件)

Angular组件和DOM元素通过事件与外部进行通信,两者中的事件绑定语法是相同的-(eventName)="expression":

<button (click)="onClick()">Click</button>

DOM元素

DOM 元素触发的一些事件通过 DOM 层级结构传播,事件首先由最内层的元素开始,然后传播到外部元素,直到它们到根元素,这种传播过程称为事件冒泡。

DOM事件冒泡与Angular可以无缝工作,具体示例如下:

import { Component } from ‘@angular/core‘;

@Component({
  selector: ‘exe-app‘,
  template: `
    <div (click)="onClick()">
      <button>Click</button>
    </div>
  `
})
export class AppComponent {
  onClick() {
    console.log(‘Click‘);
  }
}

以上代码成功运行后,当用户点击 Click 按钮,浏览器控制台将会输出:

Click

即表示 <div> 元素上设置的监听函数被执行,也间接证明了事件冒泡能正常工作。

Angular Component

Angular 允许开发者通过 @Output() 装饰器和 EventEmitter 自定义事件。它不同于 DOM 事件,因为它不支持事件冒泡。

首先来看一下自定义组件如何监听DOM事件:

event-bubbling.component.ts

import { Component } from ‘@angular/core‘;

@Component({
    selector: ‘event-bubbling‘,
    template: `
    <div>
      <button>Click</button>
    </div>
  `
})
export class EventBubblingComponent { }

app.component.ts

import { Component } from ‘@angular/core‘;

@Component({
  selector: ‘exe-app‘,
  template: `
    <div>
      <event-bubbling (click)="onClick()"></event-bubbling>
    </div>
  `
})
export class AppComponent {
  onClick() {
    console.log(‘Click‘);
  }
}

以上代码成功运行后,当用户点击 Click 按钮,浏览器控制台也会输出 Click。表示我们的自定义组件,也是可以正常处理组件内元素触发的 click 事件。但当我们在自定义组件中创建自定义事件时,事件名称也是使用 click ,那么会不会有问题呢?我们马上来实践一下。

Custom Events

event-bubbling.component

import { Component, Output, EventEmitter } from ‘@angular/core‘;

@Component({
    selector: ‘event-bubbling‘,
    template: `
    <div>
      <button (click)="onClick(‘Button 1‘)">Button 1</button>
      <button (click)="onClick(‘Button 2‘)">Button 2</button>
    </div>
  `
})
export class EventBubblingComponent {
    @Output() click = new EventEmitter();

    onClick(button: string) {
        this.click.next(button);
    }
}

app.component.ts

import { Component } from ‘@angular/core‘;

@Component({
  selector: ‘exe-app‘,
  template: `
    <div>
      <event-bubbling (click)="onClick($event)"></event-bubbling>
    </div>
  `
})
export class AppComponent {
  onClick(event: any) {
    console.log(event);
  }
}

以上代码成功运行后,当用户点击 Button 1 按钮时,浏览器控制台将会输出:

Button 1
MouseEvent {isTrusted: true, screenX: 69, screenY: 161, clientX: 43, clientY: 22…}
时间: 2024-07-30 22:27:25

Angular4.x Event (DOM事件和自定义事件)的相关文章

js事件、自定义dom事件、自定义事件

本文参考资料是:高级编程语言第三版(13章事件和22章自定义事件). 本文涉及到: 事件的组成元素. 事件优化. 模拟事件. 自定义事件的内容 js事件是什么?高级程序13章第一句话说:js与html之间的交互是通过事件实现的.事件是浏览器或者用户自身执行的某种动作,例如我们最常用到的点击事件. 1:js事件 事件流 事件处理程序 事件对象 事件类型 事件流:从页面上接收事件的顺序 事件冒泡:概念事件从最具体的元素接收事件,然后逐级向上传播到较为不具体的元素.这个概念是由ie提出. <!DOCT

jQuery基础(鼠标事件,表单事件,键盘事件,自定义事件 篇)

1.jQuery鼠标事件之click与dbclick事件 方法一:$ele.click()(不带参数) <div id="test">点击触发<div> $("ele").click(function(){ alert('触发指定事件') }) $("#test").click(function(){ $("ele").click() //手动指定触发事件 });   方法二:$ele.click( h

Dom3级事件下自定义事件

原文出处:  http://www.w3cfuns.com/notes/11861/e21736a0b15bceca0dc7f76d77c2fb5a.html . 我拿出作者中的一段,感谢作者原创. DOM中的事件模拟(自定义事件): DOM3级还定义了自定义事件,自定义事件不是由DOM原生触发的,它的目的是让开发人员创建自己的事件.要创建的自定义事件可以由createEvent("CustomEvent"); 返回的对象有一个initCustomEvent()方法接收如下四个参数.

jQuery-3.事件篇---自定义事件

jQuery自定义事件之trigger事件 众所周知类似于mousedown.click.keydown等等这类型的事件都是浏览器提供的,通俗叫原生事件,这类型的事件是需要有交互行为才能被触发. 在jQuery通过on方法绑定一个原生事件 $('#elem').on('click', function() { alert("触发系统事件") }); alert需要执行的条件:必须有用户点击才可以.如果不同用户交互是否能在某一时刻自动触发该事件呢? 正常来说是不可以的,但是jQuery解

js原生创建模拟事件和自定义事件的方法

让我万万没想到的是,原来<JavaScript高级程序设计(第3版)>里面提到的方法已经是过时的了.后来我查看了MDN,才找到了最新的方法. 1. 模拟鼠标事件 MDN上已经说得很清楚,尽管为了保持向后兼容MouseEvent.initMouseEvent()仍然可用,但是呢,我们应该使用MouseEvent().我们使用如下页面做测试 1 <!DOCTYPE html> 2 <html> 3 <head lang="zh-CN"> 4

jQuery on() 方法 为选定已存在元素和未来元素绑定标准事件和自定义事件

很有必要说说jQuery的on方法,这个方法存在大乾坤大奥秘,主要注意两点: 1.为已存在元素和未来元素(动态添加元素)绑定处理函数. 2.自定义一个非标准的事件并绑定处理函数. 定义和用法 on() 方法在被选元素及子元素上添加一个或多个事件处理程序. 自 jQuery 版本 1.7 起,on() 方法是 bind().live() 和 delegate() 方法的新的替代品.该方法给 API 带来很多便利,我们推荐使用该方法,它简化了 jQuery 代码库. 注意:使用 on() 方法添加的

Spring内置事件以及自定义事件

1. Spring内置的事件有哪些? Spring中的事件是一个 ApplicationEvent类的子类,由实现 ApplicationEventPublisherAware 接口的类发送,实现 ApplicationListener 接口的类监听. Spring中已经定义了一组内置事件,这些事件由ApplicationContext容器发出.(ContextRefreshedEvent.ContextStartedEvent.ContextStoppedEvent.ContextClosed

js中事件(自定义事件)

今天闲的蛋疼,我们来聊一聊web前端中的事件机制和自定义事件.灵感来自jQuery,在此感谢jQuery作者. 首先,最开始. <button id="button" type="button" onclick="alert('hello')">你好</button> 这是我们在使用html写页面的时候最原生的事件触发方式.上面那行代码会生成一个按钮,当我们点击这个按钮的时候就会弹出一个原生的弹窗,内容是hello. 随着

jQuery事件之自定义事件

其实事件的bind和unbind,都是为了自定义事件做准备. 语法: $(selector).trigger(type, data); 作用:在每一个匹配的元素上触发某类事件,它触发的是由bind()注册的自定义事件. 参数解释: type(string):要采用护法的事件类型 data(Array): 可选参数, 传递给事件处理函数的附加参数 示例: 给一个按钮添加自定义的事件 $("button").bind("myClick", function(ev, a,