浅谈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 相关文章推荐
使用jquery与图片美化checkbox和radio控件的代码(打包下载)
Nov 11 Javascript
原生js实现shift/ctrl/alt按键的获取
Apr 08 Javascript
jquery获取iframe中的dom对象(两种方法)
Jul 02 Javascript
解决jquery操作checkbox火狐下第二次无法勾选问题
Feb 10 Javascript
DOM节点删除函数removeChild()用法实例
Jan 12 Javascript
js闭包引起的事件注册问题介绍
Mar 29 Javascript
原生态js,鼠标按下后,经过了那些单元格的简单实例
Aug 11 Javascript
使用canvas及js简单生成验证码方法
Apr 02 Javascript
node+vue实现用户注册和头像上传的实例代码
Jul 20 Javascript
从setTimeout看js函数执行过程
Dec 19 Javascript
详解vue 动态加载并注册组件且通过 render动态创建该组件
May 30 Javascript
Vue+Element-U实现分页显示效果
Nov 15 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 pcntl_fork和pcntl_fork 的用法
2009/04/13 PHP
yii框架中的Url生产问题小结
2012/01/16 PHP
Yii数据模型中rules类验证器用法分析
2016/07/15 PHP
TP5框架使用QueryList采集框架爬小说操作示例
2020/03/26 PHP
重定向实现代码
2006/11/20 Javascript
用正则获取指定路径文件的名称
2007/02/27 Javascript
用JS实现的一个include函数
2007/07/21 Javascript
原生Js实现元素渐隐/渐现(原理为修改元素的css透明度)
2013/06/24 Javascript
jquery 延迟执行实例介绍
2013/08/20 Javascript
jquery ajax属性async(同步异步)示例
2013/11/05 Javascript
js定时调用方法成功后并停止调用示例
2014/04/08 Javascript
基于jquery实现一个滚动的分步注册向导-附源码
2015/08/26 Javascript
深入浅析AngularJS和DataModel
2016/02/16 Javascript
使用clipboard.js实现复制功能的示例代码
2017/10/16 Javascript
Vue官方文档梳理之全局配置
2017/11/22 Javascript
vue.js与element-ui实现菜单树形结构的解决方法
2018/04/21 Javascript
jquery获取元素到屏幕四周可视距离的方法
2018/09/05 jQuery
详解vue移动端项目代码拆分记录
2019/03/15 Javascript
JSON获取属性值方法代码实例
2020/06/30 Javascript
Webpack的Loader和Plugin的区别
2020/11/09 Javascript
使用python调用浏览器并打开一个网址的例子
2014/06/05 Python
python opencv 批量改变图片的尺寸大小的方法
2019/06/28 Python
python3中的eval和exec的区别与联系
2019/10/10 Python
解决Django Haystack全文检索为空的问题
2020/05/19 Python
CSS3实现可翻转的hover效果
2018/05/23 HTML / CSS
信用卡工资证明格式
2014/09/13 职场文书
个人收入证明范本
2014/09/18 职场文书
幼儿园欢迎词范文
2015/01/26 职场文书
资金申请报告范文
2015/05/14 职场文书
开业庆典嘉宾致辞
2015/08/01 职场文书
MySQL配置主从服务器(一主多从)
2021/08/07 MySQL
JavaScript 原型与原型链详情
2021/11/02 Javascript
详解JavaScript的计时器和按钮效果设置
2022/02/18 Javascript
台式电脑蓝牙适配器怎么安装?台式电脑蓝牙适配器安装教程
2022/04/08 数码科技
浅谈Node的内存泄露问题
2022/05/06 NodeJs
Python+Pillow+Pytesseract实现验证码识别
2022/05/11 Python