首頁  >  文章  >  php教程  >  angular ngClick阻止冒泡使用預設行為的方法

angular ngClick阻止冒泡使用預設行為的方法

高洛峰
高洛峰原創
2016-12-08 09:40:011400瀏覽

本文實例講述了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});
         });
        });
       };
      }
     };
    }];
   }
);

   

在上邊程式碼中我們可以得到兩個資訊:

。 mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste

②. Angular在執行事件函數時候傳入了一個名叫$event的常數,該量即代表當前event了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(&#39;parent&#39;,$event)">
given some text for click
<hr>
<input type="checkbox" ng-model="d.stopPropagation" />Stop Propagation ?
<hr>
<button type="button" ng-click="d.click(&#39;button&#39;,$event)">button</button>
</div>
</body>
</html>

   

可以在jsbin查看效果。

先打開你的控制台,然在沒選中Stop Propagation的情況下點擊button你將會看見兩條log記錄,相反選中後則只會出現button的log資訊。

希望本文所述對大家AngularJS程式設計有所幫助。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn