2015-04-20 50 views
0

我想創建一個綁定到按鈕上的'click'事件的指令,並在條件滿足時阻止ng-click發射。如何防止ng-click發射

我知道我可以在ng-click指令本身內處理這個問題,例如,

ng-click="vm.form.$valid && vm.savePost(vm.post)" 

但我的要求比這更復雜一點。

我確實創建了一個指令,而不是綁定到按鈕的單擊事件,並調用e.preventDefault(),但這並沒有阻止ng-click發射。

+0

我通常會創建一個自定義的「sumbit()」函數來對'ng-click'執行額外的檢查,然後對'ng-disable'執行一個函數。 – RevanProdigalKnight

+0

好吧,有100%的方法 - 只要存儲ngClick totr變量,然後將ngClick設置爲空值,然後在點擊時綁定新的函數 - 如果條件符合啓動的存儲函數。不漂亮的解決方案thow( –

回答

-1

防止默認用於防止正常操作。例如不去目標,或按鈕不提交等。

ng-click和onclick不是默認操作,並且您無法通過preventDefault阻止它。

您必須在ng-click中使用函數才能在動作之前創建條件。

+0

Ofc,通常你可以防止ng點擊 –

+0

@PetrAveryanov你可以通過stopPropagation阻止onclick事件 – Kristiyan

1

也許ngClick指令首先被觸發。在這種情況下,你可以嘗試使用優先級設置來打:

(function (module) { 
    var myDirective = function() { 
     return { 
      restrict: 'A', 
      scope: true, 
      priority: 1000, 
      ........ 
     }; 
    }; 
    module.directive("myDirective", myDirective); 
}(angular.module("module"))); 

從官方文檔compile

優先

當有一個單一的DOM元素上定義了多個指令, 有時需要指定應用指令 的順序。優先級用於在編譯函數被調用之前對指令進行排序。

+0

我試過這個,但它仍然不能防止ng-click處理程序被觸發。 –