阻止复选框的默认值并不能阻止 ng-model 的更改

Preventing default on a checkbox doesn't prevent ng-model changing

由于某些动画,如果用户切换复选框状态的速度过快,则会出现视觉故障。

为了防止这种情况发生,我想限制状态更改的频率。我认为执行此操作的一种巧妙方法是指令。

我已经成功地制定了一个指令来防止 ng-click 以超过特定频率触发,但是复选框有一个特定的问题。

这是指令代码 (coffeescript):

angular.directive 'pxnMaxClickFreq', ($timeout)->

  restrict: 'A'

  # Make sure our event binding runs before any other directive
  priority: -100

  link: (scope, element, attributes)->
    timer = false
    element.on 'click', (e)->
      if timer
        e.preventDefault()
        e.stopImmediatePropagation()
      else
        timer = true
        $timeout( (-> timer = false), attributes.pxnMaxClickFreq )

还有一个 plunker 证明了我的问题。

总结

ngModel 当指定的复选框被单击时, 正在更新 即使默认设置被阻止导致复选框永远不会被选中 。我怎样才能避免这种情况?

理想情况下,我不想与 ngModelController 集成,因为我希望指令尽可能抽象。

ng-model 指令正在绑定预链接 phase.Because 中的事件,其中 stopPropagation 不起作用。

在预链接而不是 post 链接中处理您的逻辑。

这是更新的插件。 http://plnkr.co/edit/lrZYpeElxbc2TRJl3eff?p=preview