我想創建一個綁定到按鈕上的'click'事件的指令,並在條件滿足時阻止ng-click
發射。如何防止ng-click發射
我知道我可以在ng-click
指令本身內處理這個問題,例如,
ng-click="vm.form.$valid && vm.savePost(vm.post)"
但我的要求比這更復雜一點。
我確實創建了一個指令,而不是綁定到按鈕的單擊事件,並調用e.preventDefault()
,但這並沒有阻止ng-click
發射。
我想創建一個綁定到按鈕上的'click'事件的指令,並在條件滿足時阻止ng-click
發射。如何防止ng-click發射
我知道我可以在ng-click
指令本身內處理這個問題,例如,
ng-click="vm.form.$valid && vm.savePost(vm.post)"
但我的要求比這更復雜一點。
我確實創建了一個指令,而不是綁定到按鈕的單擊事件,並調用e.preventDefault()
,但這並沒有阻止ng-click
發射。
防止默認用於防止正常操作。例如不去目標,或按鈕不提交等。
ng-click和onclick不是默認操作,並且您無法通過preventDefault阻止它。
您必須在ng-click中使用函數才能在動作之前創建條件。
Ofc,通常你可以防止ng點擊 –
@PetrAveryanov你可以通過stopPropagation阻止onclick事件 – Kristiyan
也許ngClick指令首先被觸發。在這種情況下,你可以嘗試使用優先級設置來打:
(function (module) {
var myDirective = function() {
return {
restrict: 'A',
scope: true,
priority: 1000,
........
};
};
module.directive("myDirective", myDirective);
}(angular.module("module")));
從官方文檔compile:
優先
當有一個單一的DOM元素上定義了多個指令, 有時需要指定應用指令 的順序。優先級用於在編譯函數被調用之前對指令進行排序。
我試過這個,但它仍然不能防止ng-click處理程序被觸發。 –
我通常會創建一個自定義的「sumbit()」函數來對'ng-click'執行額外的檢查,然後對'ng-disable'執行一個函數。 – RevanProdigalKnight
好吧,有100%的方法 - 只要存儲ngClick totr變量,然後將ngClick設置爲空值,然後在點擊時綁定新的函數 - 如果條件符合啓動的存儲函數。不漂亮的解決方案thow( –