[英]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.