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 相关文章推荐
(function(){})()的用法与优点
Mar 11 Javascript
网页图片延时加载的js代码
Apr 22 Javascript
jQuery bind事件使用详解
May 05 Javascript
基于jQuery+HttpHandler实现图片裁剪效果代码(适用于论坛, SNS)
Sep 02 Javascript
Javascript判断对象是否相等实现代码
Mar 18 Javascript
JavaScript开发人员的10个关键习惯小结
Dec 05 Javascript
javascript元素动态创建实现方法
May 13 Javascript
jQuery焦点图切换特效代码分享
Sep 15 Javascript
vue组件实现可搜索下拉框扩展
Oct 23 Javascript
vuex 中插件的编写案例解析
Jun 10 Javascript
详解vue-flickity的fullScreen功能实现
Apr 07 Javascript
Js实现粘贴上传图片的原理及示例
Dec 09 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
vBulletin Forum 2.3.xx SQL Injection
2006/10/09 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(三)
2014/06/23 PHP
一个非常完美的读写ini格式的PHP配置类分享
2015/02/12 PHP
Zend Framework实现具有基本功能的留言本(附demo源码下载)
2016/03/22 PHP
js文件Cookie存取值示例代码
2014/02/20 Javascript
jquery中checkbox全选失效的解决方法
2014/12/26 Javascript
jquery制作 随机弹跳的小球特效
2015/02/01 Javascript
JavaScript通过事件代理高亮显示表格行的方法
2015/05/27 Javascript
jquery.cookie实现的客户端购物车操作实例
2015/12/24 Javascript
jQuery表单事件实例代码分享
2016/08/18 Javascript
JavaScript鼠标特效大全
2016/09/13 Javascript
JS匿名函数实例分析
2016/11/26 Javascript
JS随机排序数组实现方法分析
2017/10/11 Javascript
JavaScript判断变量名是否存在数组中的实例
2017/12/28 Javascript
基于jQuery实现Ajax验证用户名是否可用实例
2018/03/25 jQuery
JavaScript引用类型RegExp基本用法详解
2018/08/09 Javascript
解决angularjs中同步执行http请求的方法
2018/08/13 Javascript
angular 实现下拉列表组件的示例代码
2019/03/09 Javascript
vuex刷新后数据丢失的解决方法
2020/10/18 Javascript
[04:49]2014DOTA2国际邀请赛 Newbee顺利挺进总决赛 ImbaTV独家专访
2014/07/19 DOTA
[01:17]炒鸡美酒第四天TA暴走
2018/06/05 DOTA
Python多线程编程(五):死锁的形成
2015/04/05 Python
Python字典,函数,全局变量代码解析
2017/12/18 Python
Python机器学习之决策树算法
2017/12/22 Python
Django如何配置mysql数据库
2018/05/04 Python
Python中正反斜杠(‘/’和‘\’)的意义与用法
2019/08/12 Python
python使用socket 先读取长度,在读取报文内容示例
2019/09/26 Python
pycharm 使用anaconda为默认环境的操作
2021/02/05 Python
CSS3的transition和animation的用法实例介绍
2014/08/20 HTML / CSS
CSS3新增布局之: flex详解
2020/06/18 HTML / CSS
初三学生个人自我评定
2014/04/06 职场文书
高质量“欢迎词”
2019/04/03 职场文书
php中pcntl_fork详解
2021/04/01 PHP
Redis6.0搭建集群Redis-cluster的方法
2021/05/08 Redis
新手入门Mysql--sql执行过程
2021/06/20 MySQL
MySQL中优化SQL语句的方法(show status、explain分析服务器状态信息)
2022/04/09 MySQL