您好,欢迎访问一九零五行业门户网

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程序设计有所帮助。
其它类似信息

推荐信息