当前位置: 移动技术网 > IT编程>脚本编程>AngularJs > angular ngClick阻止冒泡使用默认行为的方法

angular ngClick阻止冒泡使用默认行为的方法

2018年05月08日  | 移动技术网IT编程  | 我要评论

本文实例讲述了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程序设计有所帮助。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网