angular ngClick阻止冒泡使用默认行为的方法


Posted in Javascript onNovember 03, 2016

本文实例讲述了angular ngClick阻止冒泡使用默认行为的方法。分享给大家供大家参考,具体如下:

这其实是一个很简单的问题,如果你认真查看过Angular官方的API文档,本来不想记录的。但是这个问题不止一次的被人问起,所以今天在记录在这里。

在Angular中已经对一些ng事件如ngClick,ngBlur,ngCopy,ngCut,ngDblclick...中加入了一个变量叫做$event.

如ngClick在官方文档是这么描述的:

Expression to evaluate upon click. (Event object is available as $event)

在查看Angular代码ngEventDirs.js:

var ngEventDirectives = {};
forEach(
   'click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste'.split(' '),
   function(name) {
    var directiveName = directiveNormalize('ng-' + name);
    ngEventDirectives[directiveName] = ['$parse', function($parse) {
     return {
      compile: function($element, attr) {
       var fn = $parse(attr[directiveName]);
       return function(scope, element, attr) {
        element.on(lowercase(name), function(event) {
         scope.$apply(function() {
          fn(scope, {$event:event});
         });
        });
       };
      }
     };
    }];
   }
);

在上边代码我们可以得到两个信息:

①. Angular支持的event: click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste

②. Angular在执行事件函数时候传入了一个名叫$event的常量,该常量即代表当前event对象,如果你在Angular之前引入了jQuery那么这就是jQuery的event.

所以我们可以利用event的stopPropagation来阻止事件的冒泡:如下代码:jsbin

html 代码:

<!DOCTYPE html>
<html id="ng-app" ng-app="app">
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.1.5/angular.min.js"></script>
<meta charset="utf-8">
<title>JS Bin</title>
</head>
<body ng-controller="demo as d">
<div ng-click="d.click('parent',$event)">
given some text for click
<hr>
<input type="checkbox" ng-model="d.stopPropagation" />Stop Propagation ?
<hr>
<button type="button" ng-click="d.click('button',$event)">button</button>
</div>
</body>
</html>

js 代码:

angular.module("app",[])
.controller("demo",[function(){
 var vm = this;
 vm.click = function(name,$event){
  console.log(name +" -----called");
  if(vm.stopPropagation){
   $event.stopPropagation();
  }
 };
 return vm;
}]);

可以在jsbin查看效果。

首先打开你的控制台,然在没选中Stop Propagation的情况下点击button你将会看见两条log记录,相反选中后则只会出现button的log信息。

希望本文所述对大家AngularJS程序设计有所帮助。

Javascript 相关文章推荐
JS日历 推荐
Dec 03 Javascript
jquery 跨域访问问题解决方法(笔记)
Jun 08 Javascript
一个简单的JS时间控件示例代码(JS时分秒时间控件)
Nov 22 Javascript
基于JavaScript制作霓虹灯文字 代码 特效
Sep 01 Javascript
基于JS+Canves实现点击按钮水波纹效果
Sep 15 Javascript
文件上传的几个示例分享【推荐】
Dec 16 Javascript
微信小程序 详解Page中data数据操作和函数调用
Jan 12 Javascript
基于vue的fullpage.js单页滚动插件
Mar 20 Javascript
vue表单自定义校验规则介绍
Aug 28 Javascript
Vue filter格式化时间戳时间成标准日期格式的方法
Sep 16 Javascript
React中使用外部样式的3种方式(小结)
May 28 Javascript
js实现圆形显示鼠标单击位置
Feb 11 Javascript
vue.js指令v-for使用及索引获取
Nov 03 #Javascript
vue.js初学入门教程(1)
Nov 03 #Javascript
把json格式的字符串转换成javascript对象或数组的方法总结
Nov 03 #Javascript
AngularJS出现$http异步后台无法获取请求参数问题的解决方法
Nov 03 #Javascript
Centos7 中安装 Node.js v4.4.4
Nov 03 #Javascript
[原创]javascript typeof id==='string'?document.getElementById(id):id解释
Nov 02 #Javascript
微信小程序  audio音频播放详解及实例
Nov 02 #Javascript
You might like
php实现jQuery扩展函数
2009/10/30 PHP
php array_search() 函数使用
2010/04/13 PHP
php include和require的区别深入解析
2013/06/17 PHP
Yii调试SQL的常用方法
2014/07/09 PHP
自编函数解决pathinfo()函数处理中文问题
2014/11/03 PHP
PHP+MYSQL中文乱码问题
2015/07/01 PHP
PHP实现的自定义图像居中裁剪函数示例【测试可用】
2017/08/11 PHP
jquery实现简单的拖拽效果实例兼容所有主流浏览器(优化篇)
2013/06/28 Javascript
jquery自定义类似$.ajax()的方法实现代码
2013/08/13 Javascript
JQuery拖动表头边框线调整表格列宽效果代码
2014/09/10 Javascript
浅谈javascript中关于日期和时间的基础知识
2016/07/13 Javascript
vuejs开发组件分享之H5图片上传、压缩及拍照旋转的问题处理
2017/03/06 Javascript
Vue2.0 多 Tab切换组件的封装实例
2017/07/28 Javascript
js的Object.assign用法示例分析
2020/03/05 Javascript
使用python编写批量卸载手机中安装的android应用脚本
2014/07/21 Python
python进阶教程之动态类型详解
2014/08/30 Python
python实现简单ftp客户端的方法
2015/06/28 Python
通过Python使用saltstack生成服务器资产清单
2016/03/01 Python
使用python读取csv文件快速插入数据库的实例
2018/06/21 Python
Python 中的lambda函数介绍
2018/10/10 Python
Python对象转换为json的方法步骤
2019/04/25 Python
python+selenium 点击单选框-radio的实现方法
2019/09/03 Python
python构建指数平滑预测模型示例
2019/11/21 Python
利用Python的sympy包求解一元三次方程示例
2019/11/22 Python
如何基于Python创建目录文件夹
2019/12/31 Python
Python基于requests库爬取网站信息
2020/03/02 Python
Python如何实现FTP功能
2020/05/28 Python
Notino匈牙利:购买香水和化妆品
2019/04/12 全球购物
新媒传信软件测试面试题
2013/02/24 面试题
农业局学习党的群众路线教育实践活动心得体会
2014/03/07 职场文书
国际贸易实训报告
2014/11/05 职场文书
先进个人自荐书
2015/03/06 职场文书
廉政承诺书范文
2015/04/28 职场文书
2015年医院药剂科工作总结
2015/05/04 职场文书
承诺书的内容有哪些,怎么写?
2019/06/21 职场文书
MySQL 视图(View)原理解析
2021/05/19 MySQL