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>

デバウンス値が非常に長いため、「DISCARD」をクリックすると、ng-model はその変更を反映しません。

ただし、「保存」をクリックすると、デバウンス値を変更するか、期限切れにすることができるので、変更がすぐに反映されます。

AngularJs ドキュメントに cancelDebounce() が見つかりません。解決策を提供したい人はいますか? ありがとう

4

2 に答える 2

1

のような debounce の値を持つ 1 つのスコープ変数を用意し、まず be-bounce の値を にリセットする関数をコントローラー内に$scope.myDebounce = 20000001 つ作成し、次にフォームの変更をロールバックすることをお勧めします。次のダイジェスト サイクルで変数を実際の値にリセットします。discard0myDebounce

マークアップ

<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 に答える