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 相关文章推荐
javascript Ext JS 状态默认存储时间
Feb 15 Javascript
Javascript解决常见浏览器兼容问题的12种方法
Jan 04 Javascript
扩展javascript的Date方法实现代码(prototype)
Nov 20 Javascript
jquery调用wcf并展示出数据的方法
Jul 07 Javascript
JAVASCRIPT车架号识别/验证函数代码 汽车车架号验证程序
Jan 08 Javascript
JavaScript Array对象扩展indexOf()方法
May 09 Javascript
纯js代码实现未知宽高的元素在指定元素中垂直水平居中显示
Sep 12 Javascript
jQuery进行组件开发完整实例
Dec 15 Javascript
JS使用cookie设置样式的方法
Jun 30 Javascript
vue单页应用在页面刷新时保留状态数据的方法
Sep 21 Javascript
vue组件开发之slider组件使用详解
Aug 21 Javascript
在react项目中使用antd的form组件,动态设置input框的值
Oct 24 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基础知识:类与对象(5) static
2006/12/13 PHP
PHP执行linux系统命令的常用函数使用说明
2010/04/27 PHP
PHP zlib扩展实现页面GZIP压缩输出
2010/06/17 PHP
解析PHP对现有搜索引擎的调用
2013/06/25 PHP
php中hashtable实现示例分享
2014/02/13 PHP
php实现文件编码批量转换
2014/03/10 PHP
PHP区块查询实现方法分析
2018/05/12 PHP
JavaScript脚本性能的优化方法
2007/02/02 Javascript
lib.utf.js
2007/08/21 Javascript
基于jquery的15款幻灯片插件
2011/04/10 Javascript
jquery text(),val(),html()方法区别总结
2013/11/04 Javascript
JavaScript中字符串分割函数split用法实例
2015/04/07 Javascript
js的flv视频播放器插件使用方法
2015/06/23 Javascript
Bootstrap 布局组件(全)
2016/07/18 Javascript
Bootstrap table使用方法详细介绍
2016/12/09 Javascript
vue 实现 tomato timer(蕃茄钟)实例讲解
2017/07/24 Javascript
简单实现jQuery轮播效果
2017/08/18 jQuery
angular2系列之路由转场动画的示例代码
2017/11/09 Javascript
详解vue-meta如何让你更优雅的管理头部标签
2018/01/18 Javascript
JavaScript 跨域之POST实现方法
2018/05/07 Javascript
详解可以用在VS Code中的正则表达式小技巧
2019/05/14 Javascript
Vue封装Axios请求和拦截器的步骤
2020/09/16 Javascript
vue 获取到数据但却渲染不到页面上的解决方法
2020/11/19 Vue.js
用Python实现服务器中只重载被修改的进程的方法
2015/04/30 Python
python数字图像处理之骨架提取与分水岭算法
2018/04/27 Python
对python程序内存泄漏调试的记录
2018/06/11 Python
tensorflow学习教程之文本分类详析
2018/08/07 Python
用纯css3实现的图片放大镜特效效果非常不错
2014/09/02 HTML / CSS
英国首屈一指的票务公司:See Tickets
2019/05/11 全球购物
初中教师个人总结
2015/02/10 职场文书
工作调动申请报告
2015/05/18 职场文书
暗恋桃花源观后感
2015/06/12 职场文书
实例讲解Python中sys.argv[]的用法
2021/06/03 Python
python字符串拼接.join()和拆分.split()详解
2021/11/23 Python
JavaScript实现两个数组的交集
2022/03/25 Javascript
Spring boot实现上传文件到本地服务器
2022/08/14 Java/Android