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 相关文章推荐
nicejforms——美化表单不用愁
Feb 20 Javascript
javascript新手语法小结
Jun 15 Javascript
jQuery getJSON 处理json数据的代码
Jul 26 Javascript
Javascript 面试题随笔
Mar 31 Javascript
仅IE6/7/8中innerHTML返回值忽略英文空格的问题
Apr 07 Javascript
javascript实现左右控制无缝滚动
Dec 31 Javascript
js改变Iframe中Src的方法
May 05 Javascript
基于Javascript实现弹出页面效果
Jan 01 Javascript
JavaScript“尽快失败”的原则实例详解
Oct 08 Javascript
将angular-ui的分页组件封装成指令的方法详解
May 10 Javascript
深入理解vue Render函数
Jul 19 Javascript
微信小程序实现运动步数排行功能(可删除)
Jul 05 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
JS中encodeURIComponent函数用php解码的代码
2012/03/01 PHP
php 删除目录下N分钟前创建的所有文件的实现代码
2013/08/10 PHP
基于PHP实现堆排序原理及实例详解
2020/06/19 PHP
javascrpt绑定事件之匿名函数无法解除绑定问题
2012/12/06 Javascript
整理的比较全的event对像在ie与firefox浏览器中的区别
2013/11/25 Javascript
JavaScript列表框listbox全选和反选的实现方法
2015/03/18 Javascript
浅析jQuery Mobile的初始化事件
2015/12/03 Javascript
JavaScript中的boolean布尔值使用学习及相关技巧讲解
2016/05/26 Javascript
javascript中的后退和刷新实现方法
2016/11/10 Javascript
使用JavaScript进行表单校验功能
2017/08/01 Javascript
Vue2.0 给Tab标签页和页面切换过渡添加样式的方法
2018/03/13 Javascript
js实现同一个页面,多个enter事件绑定的示例
2018/10/10 Javascript
Vue 中如何正确引入第三方模块的方法步骤
2019/05/05 Javascript
MockJs结合json-server模拟后台数据
2020/08/26 Javascript
详解element-ui中表单验证的三种方式
2019/09/18 Javascript
[03:42]2014DOTA2西雅图国际邀请赛7月9日TOPPLAY
2014/07/09 DOTA
[02:00]DAC2018主宣传片——龙征四海,剑问东方
2018/03/20 DOTA
python 列表,数组,矩阵两两转换tolist()的实例
2018/04/04 Python
python3+PyQt5 使用三种不同的简便项窗口部件显示数据的方法
2019/06/17 Python
新手如何发布Python项目开源包过程详解
2019/07/11 Python
PyQt+socket实现远程操作服务器的方法示例
2019/08/22 Python
浅析PEP572: 海象运算符
2019/10/15 Python
python中的subprocess.Popen()使用详解
2019/12/25 Python
让你相见恨晚的十个Python骚操作
2020/11/18 Python
浅谈CSS3 box-sizing 属性 有趣的盒模型
2019/04/02 HTML / CSS
HTML5 File API改善网页上传功能
2009/08/19 HTML / CSS
美国最佳选择产品网站:Best Choice Products
2019/05/27 全球购物
捷克家电和家具购物网站:OKAY.cz
2020/07/23 全球购物
技术总监的工作职责
2013/11/13 职场文书
学生会干部自荐信
2014/02/04 职场文书
舞蹈兴趣小组活动总结
2014/07/07 职场文书
孝敬父母的活动方案
2014/08/31 职场文书
个人存款证明书
2014/10/18 职场文书
房屋租赁协议书
2014/10/18 职场文书
SQL语法CONSTRAINT约束操作详情
2022/01/18 MySQL
vue动态绑定style样式
2022/04/20 Vue.js