簡體   English   中英

角度-捕獲ng-click in指令並將其取消

[英]Angular - catch ng-click in directive and cancel it

我編寫了一條指令,該指令可以捕獲單擊按鈕時是否按住“ shift”鍵,如果需要,則調用另一個函數。 事實是,原始的ng-click操作也正在執行。 我雖然preventDefault或stopPropagation可以停止此操作,但事實並非如此。

的HTML

  <body ng-app="app">
      <div ng-controller="ctrl">
          <button class="btn btn-default" ng-click="click1($event)" shift-ng-click="click2($event)">Click</button>
      </div>
  </body>

JS

var app = angular.module('app', []);

app.controller('ctrl', function($scope) {
    $scope.click1 = function(event) {
        console.log("Click 1");
    }

    $scope.click2 = function(event) {
        console.log("Click 2");
    }
});

app.directive('shiftNgClick', function() {
    return {
        restrict: "A",
        link: function(scope, el, attrs) {
            el.bind('click', function(event) {
                if (event.shiftKey) {

                    event.preventDefault();
                    event.stopPropagation();
                    scope.$apply(attrs.shiftNgClick);
                }
            })
        }
    };
});

因此,當調用scope。$ apply()調用的函數時,原始的ng-click()也會被調用。 導致click1()和click2()被調用。

有沒有辦法阻止這種情況的發生,還是最好完全省略ng-click並將其全部放入指令中?

在這里采摘

謝謝,丹

event.stopPropagation()將僅阻止父處理程序捕獲事件。 您正在尋找event.stopImmediatePropagation() ,這還會阻止附加到同一元素的其他處理程序運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM