angular ngClick阻止冒泡使用默认行为的方法
本文实例讲述了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程序设计有所帮助。
- AngularJS基础 ng-dblclick 指令用法
- AngularJS基础 ng-click 指令示例代码
- ANGULARJS中用NG-BIND指令实现单向绑定的例子
- angularjs自定义ng-model标签的属性
- AngularJS学习笔记之ng-options指令
- angularjs表格ng-table使用备忘录
- angularjs在ng-repeat中使用ng-model遇到的问题
- AngularJS基础 ng-include 指令示例讲解
- AngularJS ng-change 指令的详解及简单实例
- Angular.js回顾ng-app和ng-model使用技巧
- Angular ng-repeat 对象和数组遍历实例
- AngularJS基础 ng-init 指令简单示例
相关文章
基于angular-utils-ui-breadcrumbs使用心得(分享)
下面小编就为大家带来一篇基于angular-utils-ui-breadcrumbs使用心得(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧2017-11-11
详解在 Angular 项目中添加 clean-blog 模板
本篇文章主要介绍了详解在 Angular 项目中添加 clean-blog 模板,非常具有实用价值,需要的朋友可以参考下2017-07-07
使用Angular CLI进行Build(构建)和Serve详解
这篇文章主要介绍了使用Angular CLI进行Build(构建)和Serve详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2018-03-03
Angular Universal服务器端渲染避免 window is not&
这篇文章主要介绍了Angular Universal服务器端渲染避免 window is not defined错误消息,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-07-07


最新评论