1
<form name="editForm">
    Title<input ng-model="task.title" type="text" name=taskTitle ng-model-options="{ updateOn: 'default' ,debounce{'default':2000000} }">
    <a ng-click="UpdateTask(task.title)">SAVE</a>
    <a ng-click="editForm.$rollbackViewValue();">DISCARD</a>
</form>

由于 debounce 值很长,当我点击“DISCARD”时,ng-model 不会反映它的变化。

但是,我想要的是,当我单击“保存”时,我可以更改去抖动值或使其过期,以便立即反映更改。

我在 AngularJs 文档中找不到 cancelDebounce(),有人愿意提供解决方案吗?谢谢

4

2 回答 2

1

我建议你有一个范围变量,其值为 debounce like $scope.myDebounce = 2000000,然后在控制器内创建一个discard函数,该函数将首先将 be-bounce 值重置为0,然后回滚表单更改。myDebounce在下一个摘要循环中将变量重置为其实际值。

标记

<form name="editForm">
    Title
    <input ng-model="task.title" 
           type="text" 
           name=taskTitle 
           ng-model-options="{ updateOn: 'default', debounce: {'default': myDebounce } }">
    <a ng-click="UpdateTask(task.title)">SAVE</a>
    <a ng-click="editForm.$rollbackViewValue();">DISCARD</a>
</form>

代码

$scope.myDebounce = 2000000; //somewhere in controller

$scope.discard = function (form) {
   $scope.myDebounce = 0; //resetting debounce to get quick `ng-model` update
   form.$rollbackViewValue(); 
   $timeout(function(){
       //setting the actual debounce value to old one in next digest
       $scope.myDebounce = 2000000; 
   });
}
于 2015-09-06T09:34:22.150 回答
1

我认为你真正需要的是 NgModelController.$commitViewValue();

角度文档

$commitViewValue() 提交对 $modelValue 的挂起更新。更新可能因去抖动事件而处于挂起状态,或者因为输入正在等待 ng-model-options 中定义的某个未来事件。这个方法很少需要,因为 NgModelController 通常处理调用这个来响应输入事件。

于 2016-09-01T15:26:54.687 回答