阻止复选框的默认值并不能阻止 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
由于某些动画,如果用户切换复选框状态的速度过快,则会出现视觉故障。
为了防止这种情况发生,我想限制状态更改的频率。我认为执行此操作的一种巧妙方法是指令。
我已经成功地制定了一个指令来防止 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