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模板实现方法
Apr 03 Javascript
Extjs4 Treegrid 使用心得分享(经验篇)
Jul 01 Javascript
js实现的牛顿摆效果
Mar 31 Javascript
JavaScript获取网页中第一个链接ID的方法
Apr 03 Javascript
javascript手风琴下拉菜单实现代码
Nov 12 Javascript
jQuery+ajax的资源回收处理机制分析
Jan 07 Javascript
浅谈Javascript事件对象
Feb 05 Javascript
微信小程序 在线支付功能的实现
Mar 14 Javascript
详解Vue整合axios的实例代码
Jun 21 Javascript
微信小程序倒计时功能实例代码
Jul 17 Javascript
基于vue的验证码组件的示例代码
Jan 22 Javascript
JavaScript canvas基于数组生成柱状图代码实例
Mar 06 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中ltrim与rtrim去除左右空格及特殊字符实例
2016/01/07 PHP
PHP实现路由映射到指定控制器
2016/08/13 PHP
深入理解 PHP7 中全新的 zval 容器和引用计数机制
2018/10/15 PHP
php设计模式之策略模式应用案例详解
2019/06/17 PHP
Yii中特殊行为ActionFilter的使用方法示例
2020/10/18 PHP
Extjs Ext.MessageBox.confirm 确认对话框详解
2010/04/02 Javascript
jQuery ajax 路由和过滤器使用说明
2011/08/02 Javascript
幻灯片带网页设计中的20个奇妙应用示例小结
2012/05/27 Javascript
JScript分割字符串示例代码
2013/09/04 Javascript
javascript实现九宫格相加数值相等
2020/05/28 Javascript
jQuery筛选数组之grep、each、inArray、map的用法及遍历json对象
2016/06/20 Javascript
如何利用模板将HTML从JavaScript中抽离
2016/10/08 Javascript
jQuery插件autocomplete使用详解
2017/02/04 Javascript
javascript实现圣旨卷轴展开效果(代码分享)
2017/03/23 Javascript
JavaScript中in和hasOwnProperty区别详解
2017/08/04 Javascript
解决vue单页路由跳转后scrollTop的问题
2018/09/03 Javascript
jQuery轻量级表单模型验证插件
2018/10/15 jQuery
记一次vue-webpack项目优化实践详解
2019/02/17 Javascript
[01:44]《为梦想出发》—联想杯DOTA2完美世界全国高校联赛
2015/09/30 DOTA
在Django的URLconf中使用命名组的方法
2015/07/18 Python
Python进度条实时显示处理进度的示例代码
2018/01/30 Python
Python解决两个整数相除只得到整数部分的实例
2018/11/10 Python
python实现贪吃蛇小游戏
2020/03/21 Python
python3+django2开发一个简单的人员管理系统过程详解
2019/07/23 Python
Django框架创建项目的方法入门教程
2019/11/04 Python
Python Serial串口基本操作(收发数据)
2020/11/06 Python
python 基于DDT实现数据驱动测试
2021/02/18 Python
html5触摸事件判断滑动方向的实现
2018/06/05 HTML / CSS
JSF面试题:如何管量web层中的Bean,用什么标签。如何通过jsp页面与Bean绑定在一起进行处理?
2012/10/05 面试题
JPA的优势都有哪些
2013/07/04 面试题
大学生最常用的自我评价
2013/12/07 职场文书
小学课外阅读总结
2014/07/09 职场文书
2014年综治维稳工作总结
2014/11/17 职场文书
小学生差生评语
2014/12/29 职场文书
委托公证书样本
2015/01/23 职场文书
python中24小时制转换为12小时制的方法
2021/06/18 Python