浅谈angularJS中的事件


Posted in Javascript onJuly 12, 2016

什么是事件

•如同浏览器响应浏览器层的事件,比如鼠标点击、获得焦点,angular应用也可以响应angular事件

•angular事件系统并不与浏览器的事件系统相通,我们只能在作用域上监听angular事件而不是DOM事件

事件传播

因为作用域是有层次的,所以我们可以在作用域链上传递事件:

•使用$emit冒泡事件,事件从当前子作用域冒泡到赋作用域,在产生事件的作用域之上的所有作用域都会收到这个事件的通知

$emit()方法带有两个参数:

name  要发出的事件的名称

args   一个参数集合,作为对象传递到事件监听器上

•使用$broadcast向下传递事件,每个注册了监听器的子作用域都会收到这个信息

$broadcast()方法带有两个参数:

name  要广播的事件的名称

args   一个参数集合,作为对象传递到事件监听器上

•使用$on监听事件

$on()方法带有两个参数:

event  事件对象

param  参数集合,$broadcast()、$emit()传递过来的参数集合  示例:

demo.html

 <!doctype html>
 <html ng-app="freefedApp">
   <head>
     <title>angular应用demo</title>
     <script src="angular.js"></script>
     <script src="app.js"></script>
  </head>
  <body>
  <div ng-controller="freefedCtrl">
     <div event-directive change="change(title)"></div>
   </div>
  </body>
 </html>
app.js

 /*声明module*/
 var module = angular.module('freefedApp',[]);

 /*声明控制器*/
 module.controller('freefedCtrl',['$scope',function($scope){
     //监听directiveClick事件
     $scope.$on('directiveClick',function(event,param){
        console.log( param );  // 打印结果 {title : '我是来自指令子级作用域'}
     });

     $scope.change = function(title){
       var result = '请注意接收父级广播';
       //向子级作用域广播parentBroadcast事件
       $scope.$broadcast('parentBroadcast',{msg : result});
     };
 }]);

 /*声明指令*/
 module.directive('eventDirective',function(){
    return {
       scope : {
         change : '&'
       },
      replace : true,
      template : '<a>点我向上冒泡事件</a>',
       link : function( scope,el,attr ){
         el.on('click',function(){
          //向上冒泡directiveClick事件,通知父级作用域
           scope.$emit('directiveClick',{title : '我是来自指令子级作用域'});
         });

        //监听parentBroadcast事件广播
        scope.$on('parentBroadcast',function(event,msg){
           console.log( msg );  //打印结果 { msg : 请注意接收父级广播 }
        });
       }
    };
 });

事件对象属性

$on中的event事件对象属性如下:

•targetScope(作用域对象)

发送或者广播事件的作用域

•currentScope(作用域对象)

当前处理事件的作用域

•name(字符串)

正在处理事件的名称

•stopPropagation(函数)

stopPropagation()函数取消通过$emit触发事件的进一步传播

•preventDefault(函数) preventDefault()把defaultprevented标志设置为true,尽管不能停止事件传播,但是子作用域可以通过defaultprevented标志知道无需处理这个事件

•defaultPrevented(布尔值)

可以通过判断defaultPrevented属性来判断父级传播的事件是否可以去忽略

以上这篇浅谈angularJS中的事件就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
详解AngularJS中的表达式使用
Jun 16 Javascript
JS实现仿QQ面板的手风琴效果折叠菜单代码
Sep 11 Javascript
如何使用PHP+jQuery+MySQL实现异步加载ECharts地图数据(附源码下载)
Feb 23 Javascript
JavaScript实现设计模式中的单例模式的一些技巧总结
May 17 Javascript
Javascript之String对象详解
Jun 08 Javascript
基于gulp合并压缩Seajs模块的方式说明
Jun 14 Javascript
vue 通过下拉框组件学习vue中的父子通讯
Dec 19 Javascript
jQuery创建及操作xml格式数据示例
May 26 jQuery
vue中注册自定义的全局js方法
Nov 15 Javascript
实例讲解React 组件生命周期
Jul 08 Javascript
JavaScript实现拖拽和缩放效果
Aug 24 Javascript
vue 导出文件,携带请求头token操作
Sep 10 Javascript
深入剖析JavaScript面向对象编程
Jul 12 #Javascript
JS及PHP代码编写八大排序算法
Jul 12 #Javascript
微信支付 JS API支付接口详解
Jul 11 #Javascript
判断输入的字符串是否是日期格式的简单方法
Jul 11 #Javascript
JS判断日期格式是否合法的简单实例
Jul 11 #Javascript
深入浅析JavaScript中的scrollTop
Jul 11 #Javascript
js鼠标单击和双击事件冲突问题的快速解决方法
Jul 11 #Javascript
You might like
PHP如何得到当前页和上一页的地址?
2006/11/27 PHP
php cookie 登录验证示例代码
2009/03/16 PHP
利用PHP生成静态HTML文档的原理
2012/10/29 PHP
php5.5新数组函数array_column使用
2013/07/08 PHP
php实现递归抓取网页类实例
2015/04/03 PHP
JavaScript高级程序设计(第3版)学习笔记11 内建js对象
2012/10/11 Javascript
js 显示base64编码的二进制流网页图片
2014/04/04 Javascript
JavaScript版的TwoQueues缓存模型
2014/12/29 Javascript
Javascript 拖拽的一些高级的应用(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
浅谈javascript中return语句
2015/07/15 Javascript
使用plupload自定义参数实现多文件上传
2016/07/19 Javascript
浅谈vuex之mutation和action的基本使用
2017/08/29 Javascript
VUE基于NUXT的SSR 服务端渲染
2018/11/30 Javascript
Vue 自定义指令实现一键 Copy功能
2019/09/16 Javascript
vue 解决computed修改data数据的问题
2019/11/06 Javascript
[44:15]国士无双DOTA2 6.82版本详解(上)
2014/09/28 DOTA
[04:47]DOTA2-潍坊风行电子俱乐部探秘
2014/08/08 DOTA
[57:55]完美世界DOTA2联赛PWL S3 Magma vs Phoenix 第二场 12.12
2020/12/16 DOTA
Python GUI Tkinter简单实现个性签名设计
2018/06/19 Python
python 常用的基础函数
2018/07/10 Python
Windows系统下PhantomJS的安装和基本用法
2018/10/21 Python
python 实现一次性在文件中写入多行的方法
2019/01/28 Python
python模拟菜刀反弹shell绕过限制【推荐】
2019/06/25 Python
python使用多线程编写tcp客户端程序
2019/09/02 Python
解决pycharm 安装numpy失败的问题
2019/12/05 Python
Pycharm plot独立窗口显示的操作
2020/12/11 Python
美国顶级水上运动专业店:Marine Products
2018/04/15 全球购物
销售代表求职自荐信
2013/10/01 职场文书
会计岗位职责
2013/11/08 职场文书
师生聚会感言
2014/01/26 职场文书
保密承诺书范文
2014/03/27 职场文书
精神文明建设先进个人事迹材料
2014/12/24 职场文书
Nginx 负载均衡是什么以及该如何配置
2021/03/31 Servers
python绘图subplots函数使用模板的示例代码
2021/04/30 Python
css背景和边框标签实例详解
2021/05/21 HTML / CSS
Linux磁盘管理方法介绍
2022/06/01 Servers