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下利用fso判断文件是否存在的代码
Dec 11 Javascript
javascript 日期时间 转换的方法
Feb 21 Javascript
js统计页面的来访次数实现代码
May 09 Javascript
HTML+CSS+JS实现完美兼容各大浏览器的TABLE固定列
Apr 26 Javascript
JS打印组合功能
Aug 04 Javascript
深入理解jQuery.data() 的实现方式
Nov 30 Javascript
详解从新建vue项目到引入组件Element的方法
Aug 29 Javascript
layui前端框架之table表数据的刷新方法
Aug 17 Javascript
Vue作用域插槽slot-scope实例代码
Sep 05 Javascript
AngularJS修改model值时,显示内容不变的实例
Sep 13 Javascript
Vue自定义render统一项目组弹框功能
Jun 07 Javascript
VUE Elemen-ui之穿梭框使用方法详解
Jan 19 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写的日历(代码部分网摘)
2009/09/20 Javascript
JS控制显示隐藏兼容问题(IE6、IE7、IE8)
2010/04/01 Javascript
js confirm()方法的使用方法实例
2013/07/13 Javascript
js之onload事件的一点使用心得
2013/08/14 Javascript
node.js中的fs.stat方法使用说明
2014/12/16 Javascript
Jquery 实现checkbox全选方法
2015/01/28 Javascript
JavaScript实现自动对页面上敏感词进行屏蔽的方法
2015/07/27 Javascript
jQuery实现气球弹出框式的侧边导航菜单效果
2015/09/22 Javascript
jquery UI Datepicker时间控件的使用方法(加强版)
2015/11/07 Javascript
AngularJS使用ngMessages进行表单验证
2015/12/27 Javascript
JS加载器如何动态加载外部js文件
2016/05/26 Javascript
用js动态添加html元素,以及属性的简单实例
2016/07/19 Javascript
微信小程序 input输入框控件详解及实例(多种示例)
2016/12/14 Javascript
vue-router路由参数刷新消失的问题解决方法
2017/06/17 Javascript
Angular2环境搭建具体操作步骤(推荐)
2017/08/04 Javascript
JS中的模糊查询功能
2019/12/08 Javascript
vue3.0 项目搭建和使用流程
2021/03/04 Vue.js
python字典序问题实例
2014/09/26 Python
Python模拟脉冲星伪信号频率实例代码
2018/01/03 Python
python jieba分词并统计词频后输出结果到Excel和txt文档方法
2018/02/11 Python
Python下调用Linux的Shell命令的方法
2018/06/12 Python
python 不同方式读取文件速度不同的实例
2018/11/09 Python
PyTorch中反卷积的用法详解
2019/12/30 Python
Django Admin 上传文件到七牛云的示例代码
2020/06/20 Python
记一次python 爬虫爬取深圳租房信息的过程及遇到的问题
2020/11/24 Python
python subprocess pipe 实时输出日志的操作
2020/12/05 Python
css3实现多个元素依次显示效果
2017/12/12 HTML / CSS
汇科协同Java笔试题
2012/03/31 面试题
业务员岗位职责范本
2013/12/15 职场文书
主题婚礼策划方案
2014/02/10 职场文书
《再见了,亲人》教学反思
2014/02/26 职场文书
文明礼仪演讲稿
2014/05/12 职场文书
关于召开会议的通知
2015/04/15 职场文书
小马王观后感
2015/06/11 职场文书
Python学习开发之图形用户界面详解
2021/08/23 Python
Python装饰器的练习题
2021/11/23 Python