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 相关文章推荐
Using the TextRange Object
Oct 14 Javascript
javascript contains和compareDocumentPosition 方法来确定是否HTML节点间的关系
Feb 04 Javascript
JavaScript利用append添加元素报错的解决方法
Jul 01 Javascript
调试JavaScript中正则表达式中遇到的问题
Jan 27 Javascript
javascript递归回溯法解八皇后问题
Apr 22 Javascript
JavaScript学习笔记整理_简单实现枚举类型,扑克牌应用
Sep 19 Javascript
PHP捕捉异常中断的方法
Oct 24 Javascript
cocos creator Touch事件应用(触控选择多个子节点的实例)
Sep 10 Javascript
jQuery滑动效果实现方法分析
Sep 05 jQuery
TypeScript基础入门教程之三重斜线指令详解
Oct 22 Javascript
Web安全之XSS攻击与防御小结
Dec 13 Javascript
JS实现简易日历效果
Jan 25 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
php5 and xml示例
2006/11/22 PHP
关于url地址传参数时字符串有回车造成页面脚本赋值失败的解决方法
2013/06/28 PHP
PHP实现的简单三角形、矩形周长面积计算器分享
2014/11/18 PHP
php获取linux命令结果的实例
2017/03/13 PHP
php数值转换时间及时间转换数值用法示例
2017/05/18 PHP
Laravel框架定时任务2种实现方式示例
2018/12/08 PHP
PHP检查文件是否存在,不存在自动创建及读取文件内容操作示例
2020/01/23 PHP
面向对象的Javascript之三(封装和信息隐藏)
2012/01/27 Javascript
js操作table示例(个人心得)
2013/11/29 Javascript
究竟什么是Node.js?Node.js有什么好处?
2015/05/29 Javascript
JavaScript中数据结构与算法(五):经典KMP算法
2015/06/19 Javascript
jquery实现平滑的二级下拉菜单效果
2015/08/26 Javascript
JavaScript 中调用 Kotlin 方法实例详解
2017/06/09 Javascript
浅谈Express异步进化史
2017/09/09 Javascript
全站最详细的Vuex教程
2018/04/13 Javascript
Vue中的混入的使用(vue mixins)
2018/06/01 Javascript
[02:38]2018DOTA2亚洲邀请赛赛前采访-VGJ.T
2018/04/03 DOTA
Python极简代码实现杨辉三角示例代码
2016/11/15 Python
python数据结构之链表详解
2017/09/12 Python
在python shell中运行python文件的实现
2019/12/21 Python
python实现发送带附件的邮件代码分享
2020/09/22 Python
详解python3 GUI刷屏器(附源码)
2021/02/18 Python
CSS超出文本指定宽度用省略号代替和文本不换行
2016/05/05 HTML / CSS
意大利领先的奢侈品在线时装零售商:MCLABELS
2020/10/13 全球购物
几道PHP的面试题
2012/05/19 面试题
如何利用find命令查找文件
2016/11/18 面试题
18岁生日感言
2014/01/12 职场文书
个人收入证明范本
2014/09/18 职场文书
2014年扫黄打非工作总结
2014/12/03 职场文书
技术员个人工作总结
2015/03/03 职场文书
党校个人总结
2015/03/04 职场文书
房地产销售助理岗位职责
2015/04/14 职场文书
硕士学位申请报告
2015/05/15 职场文书
高三物理教学反思
2016/02/20 职场文书
哪类餐饮行业,最适合在高校创业?
2019/08/19 职场文书
HTML常用标签超详细整理
2022/03/19 HTML / CSS