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 相关文章推荐
jquery控制listbox中项的移动并排序的实现代码
Sep 28 Javascript
改写一个简单的菜单 弹性大小
Dec 02 Javascript
jQuery.autocomplete 支持中文输入(firefox)修正方法
Mar 10 Javascript
jquery.ui.draggable中文文档(原文翻译)
Nov 15 Javascript
json实现前后台的相互传值详解
Jan 05 Javascript
详解tween.js 中文使用指南
Jan 05 Javascript
js提取中文拼音首字母的封装工具类
Mar 12 Javascript
对angularJs中自定义指令replace的属性详解
Oct 09 Javascript
webpack4+react多页面架构的实现
Oct 25 Javascript
js笔试题-接收get请求参数
Jun 15 Javascript
vue项目使用高德地图的定位及关键字搜索功能的实例代码(踩坑经验)
Mar 07 Javascript
JS如何寻找数组中心索引过程解析
Jun 01 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 Undefined index的问题
2009/06/01 PHP
PHP 学习路线与时间表
2010/02/21 PHP
基于PHP5魔术常量与魔术方法的详解
2013/06/13 PHP
php使用fputcsv()函数csv文件读写数据的方法
2015/01/06 PHP
Ajax和PHP正则表达式验证表单及验证码
2016/09/24 PHP
PHP 实现从数据库导出到.csv文件方法
2017/07/06 PHP
PHP实现字符串翻转功能的方法【递归与循环算法】
2017/11/03 PHP
jquery下动态显示jqGrid以及jqGrid的属性设置容易出现问题的解决方法
2010/10/22 Javascript
jQuery1.9.1针对checkbox的调整方法(prop)
2014/05/01 Javascript
JavaScript保留两位小数的2个自定义函数
2014/05/05 Javascript
PhotoShop给图片自动添加边框及EXIF信息的JS脚本
2015/02/15 Javascript
Node.js 实现简单小说爬虫实例
2016/11/18 Javascript
详解vue slot插槽的使用方法
2017/06/13 Javascript
js实现登录与注册界面
2017/11/01 Javascript
在vue中读取本地Json文件的方法
2018/09/06 Javascript
微信小程序实现下滑到底部自动翻页功能
2020/03/07 Javascript
vue 数据操作相关总结
2020/12/17 Vue.js
利用Python实现简单的相似图片搜索的教程
2015/04/23 Python
Python实现的井字棋(Tic Tac Toe)游戏示例
2018/01/31 Python
python 搜索大文件的实例代码
2019/07/08 Python
pycharm重命名文件的方法步骤
2019/07/29 Python
pyhton中__pycache__文件夹的产生与作用详解
2019/11/24 Python
OpenCV哈里斯(Harris)角点检测的实现
2020/01/15 Python
python实现密码强度校验
2020/03/18 Python
解决redis与Python交互取出来的是bytes类型的问题
2020/07/16 Python
Python如何合并多个字典或映射
2020/07/24 Python
利用HTML5的新特点实现图片文件异步上传
2014/05/29 HTML / CSS
Origins悦木之源英国官网:雅诗兰黛集团高端植物护肤品牌
2017/11/06 全球购物
Java中实现多态的机制
2015/08/09 面试题
大学生就业意向书范文
2014/04/01 职场文书
敬老月活动总结
2014/08/28 职场文书
党的群众路线教育实践活动制度建设计划方案
2014/10/31 职场文书
2015年考研复习计划
2015/01/19 职场文书
万能密码的SQL注入漏洞其PHP环境搭建及防御手段
2021/09/04 SQL Server
mysql如何能有效防止删库跑路
2021/10/05 MySQL
Spring Boot 的创建和运行示例代码详解
2022/07/23 Java/Android