浅谈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 相关文章推荐
如何取得中文输入的真实长度?
Jun 24 Javascript
Div自动滚动到末尾的代码
Oct 26 Javascript
jQuery TextBox自动完成条
Jul 22 Javascript
关于ExtJS4.1:快捷键支持的问题
Apr 24 Javascript
JavaScript+CSS实现仿Mootools竖排弹性动画菜单效果
Oct 14 Javascript
js针对ip地址、子网掩码、网关的逻辑性判断
Jan 06 Javascript
JavaScript学习笔记之取数组中最大值和最小值
Mar 23 Javascript
JS实现登录页密码的显示和隐藏功能
Dec 06 Javascript
JS 实现百度搜索功能
Feb 01 Javascript
Angular动态绑定样式及改变UI框架样式的方法小结
Sep 03 Javascript
在layui中对table中的数据进行判断(0、1)转换为提示信息的方法
Sep 28 Javascript
webpack+vue.js构建前端工程化的详细教程
May 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结束标签的使用细节探讨及联想
2013/03/04 PHP
php下foreach提示Warning:Invalid argument supplied for foreach()的解决方法
2014/11/11 PHP
php中HTTP_REFERER函数用法实例
2014/11/21 PHP
PHP使用PDO连接ACCESS数据库
2015/03/05 PHP
php生成毫秒时间戳的实例讲解
2017/09/22 PHP
jquery lazyload延迟加载技术的实现原理分析
2011/01/24 Javascript
javascript模拟的Ping效果代码 (Web Ping)
2011/03/13 Javascript
jQuery简单实现banner图片切换
2014/01/02 Javascript
关闭页面window.location事件未执行的原因及解决方法
2014/09/01 Javascript
jQuery中die()方法用法实例
2015/01/19 Javascript
js简单正则验证汉字英文及下划线的方法
2016/11/28 Javascript
微信小程序 支付简单实例及注意事项
2017/01/06 Javascript
JavaScript实现动态增删表格的方法
2017/03/09 Javascript
关于JS与jQuery中的文档加载问题
2017/08/22 jQuery
Javascript防止图片拉伸的自适应处理方法
2017/12/26 Javascript
解决ng-repeat产生的ng-model中取不到值的问题
2018/10/02 Javascript
JavaScript实现打砖块游戏
2020/02/25 Javascript
Vue实现浏览器打印功能的代码
2020/04/17 Javascript
跟老齐学Python之私有函数和专有方法
2014/10/24 Python
python模拟事件触发机制详解
2018/01/19 Python
python 解决mysql where in 对列表(list,,array)问题
2020/06/06 Python
Python如何实现感知器的逻辑电路
2020/12/25 Python
python 自动识别并连接串口的实现
2021/01/19 Python
CSS3的Border-radius轻松制作圆角
2012/12/24 HTML / CSS
CSS3实现的炫酷菜单代码分享
2015/03/12 HTML / CSS
HTML5 video进入全屏和退出全屏的实现方法
2020/07/28 HTML / CSS
英国现代家具和装饰网站:PN Home
2018/08/16 全球购物
Interflora澳大利亚:同日鲜花速递
2019/06/25 全球购物
小学生成长感言
2014/01/30 职场文书
行政文员实习自我鉴定范文
2014/09/14 职场文书
研讨会通知
2015/04/27 职场文书
2015学校年度工作总结
2015/05/11 职场文书
催款函怎么写
2015/06/24 职场文书
JS 4个超级实用的小技巧 提升开发效率
2021/10/05 Javascript
Pyhton爬虫知识之正则表达式详解
2022/04/01 Python
解决ubuntu安装软件时,status-code=409报错的问题
2022/12/24 Servers