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复选框CHECKBOX全选、反选
Aug 30 Javascript
node.js中的fs.write方法使用说明
Dec 15 Javascript
JavaScript合并两个数组并去除重复项的方法
Jun 13 Javascript
浅析在javascript中创建对象的各种模式
May 06 Javascript
通过正则表达式获取url中参数的简单实现
Jun 07 Javascript
bootstrap学习笔记之初识bootstrap
Jun 21 Javascript
使用jQuery.Pin垂直滚动时固定导航
May 24 jQuery
jquery插件开发之选项卡制作详解
Aug 30 jQuery
vue中如何实现后台管理系统的权限控制的方法示例
Sep 19 Javascript
Javascript数组方法reduce的妙用之处分享
Jun 10 Javascript
jQuery实现提交表单时不提交隐藏div中input的方法
Oct 08 jQuery
vue组件创建的三种方式小结
Feb 03 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
ThinkPHP的Widget扩展实例
2014/06/19 PHP
php简单操作mysql数据库的类
2015/04/16 PHP
PHP中file_exists使用中遇到的问题小结
2016/04/05 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
2018/06/13 PHP
PHP实现随机数字、字母的验证码功能
2018/08/01 PHP
基于jQuery的Tab选项框效果代码(插件)
2011/03/01 Javascript
百度移动版的url编码解码示例
2014/04/29 Javascript
JavaScript AJAX之惰性载入函数
2014/08/27 Javascript
JS合并数组的几种方法及优劣比较
2014/09/19 Javascript
jQuery事件绑定和委托实例
2014/11/25 Javascript
javascript中indexOf技术详解
2015/05/07 Javascript
JS实现的自定义网页拖动类
2015/11/06 Javascript
jquery获取文档高度和窗口高度汇总
2016/01/25 Javascript
详解用node-images 打造简易图片服务器
2017/05/08 Javascript
JS实现队列的先进先出功能示例
2017/05/10 Javascript
浅谈angular.js跨域post解决方案
2017/08/30 Javascript
动态Axios的配置步骤详解
2018/01/12 Javascript
浅谈Vue Element中Select下拉框选取值的问题
2018/03/01 Javascript
Vue通过ref父子组件拿值方法
2018/09/12 Javascript
Vue press 支持图片放大功能的实例代码
2018/11/09 Javascript
layui table 列宽百分比显示的实现方法
2019/09/28 Javascript
python网络编程之文件下载实例分析
2015/05/20 Python
Flask框架配置与调试操作示例
2018/07/23 Python
python pandas消除空值和空格以及 Nan数据替换方法
2018/10/30 Python
浅谈python的dataframe与series的创建方法
2018/11/12 Python
Python 输出时去掉列表元组外面的方括号与圆括号的方法
2018/12/24 Python
深度辨析Python的eval()与exec()的方法
2019/03/26 Python
Python求两点之间的直线距离(2种实现方法)
2019/07/07 Python
详解Python对JSON中的特殊类型进行Encoder
2019/07/15 Python
python实现图片二值化及灰度处理方式
2019/12/07 Python
HTML4和HTML5之间除了相似以外的10个主要不同
2012/12/13 HTML / CSS
旅游网创业计划书
2014/01/31 职场文书
召开会议通知范文
2015/04/15 职场文书
一看就懂的MySQL的聚簇索引及聚簇索引是如何长高的
2021/05/25 MySQL
Mysql中一千万条数据怎么快速查询
2021/12/06 MySQL
PostgreSQL数据库创建并使用视图以及子查询
2022/04/11 PostgreSQL