2015-07-06 2 views
0

У меня есть следующие кнопки радио Группа:Angularjs дребезг очищает мой вход радио

<input type="radio" name="GROUP" ng-model="data1" id="for1" value="value" ng-change="formSubmit()" ng-model-options="{debounce: 3000}"> 
<input type="radio" name="GROUP" ng-model="data2" id="for2" value="value" ng-change="formSubmit()" ng-model-options="{debounce: 3000}"> 

Как вы можете видеть, на ng-click, я его запустить определенную функцию, но и имеет debounce только произойти с 3-секундный тайм-аут.

Когда у меня есть ng-model-options="{debounce: 3000}", очень часто мои группы радиоуправления снимают флажки, то есть не будут отмечены никакие входные данные в группе.

Когда я удаляю debounce, эта проблема не возникает.

Кто-нибудь знает, как я могу это исправить?

+0

У вас есть jsfiddle продемонстрировать пожалуйста. – rikAtee

+0

@rikAtee http://plnkr.co/edit/0OovzU9mMDtbgLfYWYYc – bryan

+0

Я пробовал это: http://embed.plnkr.co/xJlhU2fpLLtxdQFlBMhH Когда я пытаюсь переключиться с одного варианта на другой, мне кажется, что оба переключателя выбраны до тех пор, пока происходит дебютирование, а затем коммутатор (любые клики во время периода дебюта игнорируются). Это выглядит как технически корректным, так и очень слабым пользователем; возможно, самый простой ответ здесь: «Не отбрасывайте элементы формы с одним кликом, потому что нечего делать»? –

ответ

0

Основываясь на нить комментария выше, и если вы хотите сохранить первый щелчок и игнорировать последующие из них в рамках второй задержки 3, я предлагаю:

<input type="radio" ng-change="doItLater();" value="X">

(между тем, в директиве:

scope.doItLater = function() { 
    if (scope.timeoutwatcher !== undefined) {return;} 
    scope.timeoutwatcher = $timeout(function() { 
     // do it 
     delete scope.timeoutwatcher; 
    },3000); 
} 

Или, если вы хотите, чтобы позволить позже нажмет в течение периода ожидания переопределять более ранние,

scope.doItLater = function() { 
    $timeout.cancel(scope.timeoutwatcher); 
    scope.timeoutwatcher = $timeout(function() { 
     // do it 
    },3000); 
} 
+0

для второго, который я получаю: 'Ошибка: не могу найти переменную: $ timeout' – bryan

+0

вам нужно ввести $ timeout в качестве зависимости. https://docs.angularjs.org/api/ng/service/$timeout –

0

что-то подобное может помочь

angular 
    .module('app', []) 
    .controller('example', ['$scope', function($scope) { 
     $scope.user = {}; 
     $scope.$watch('user.gender', $scope.callback); 
     $scope.callback = function() { 
      alert($scope.user); 
     } 
    }]); 

и в HTML, так что-то вроде

<form ng-app="app" ng-controller="example"> 
    <input name="jim" type="radio" ng-model="user.gender" value="male" ng-model-options="{debounce: 3000}" />male 
    <input name="jim" type="radio" ng-model="user.gender" value="female" ng-model-options="{debounce: 3000}" />female 
    <br /> 
    <pre>form = {{user | json}}</pre>