2016-08-15 3 views
0

Я пытаюсь отключить кнопку отправки, пока выполняется какой-либо асинхронный вызов, но похоже, что ng-disabled не отслеживает изменение стоимости. Вот пример кода:Ng-disabled не реагирует на изменения в значении

наценки:

<button ng-show="!resetSuccess" class="form-input login-button" ng-disabled="changeFormError || changeFormProgress", ng-click="resetPassword(changeForm)">Send Email</button> 

JS:

scope.resetPassword = function (form) { 
    if (form.$valid) { 
     scope.changeFormProgress = true; // value is changed, but ng-disable doesn't react on it 
     // scope.$digest(); produces an error 
     someAsyncCallReturningPromise.then(function() { 
      scope.changeFormProgress = false; 
      scope.changeForm.$setPristine(); 
     }, function (err) { 
      scope.changeFormProgress = false; 
      scope.changeFormError = true; // changeFormError works ok, ng-disabled watches it 
     }); 
    scope.changeFormError = true; 
}; 

Похоже $ дайджеста не вызывается после scope.changeFormProgress = true; по какой-то причине, но если я пытаюсь добавить его вручную с scope.$digest();, я получил ошибку Error: [$rootScope:inprog] $apply already in progress. Итак, есть ли способ сделать ng-disabled часы для изменения ценности в этой ситуации?

+0

попробуйте установить только для чтения – TNC

+0

@TNC извините, выглядит как 'нг-только для чтения =«changeFormProgress»' не работает слишком – snowfinch27

+0

Хм, я не понимаю, почему это не должен» т работы. Не могли бы вы настроить Plunker для этого? – Aron

ответ

0

Вы должны изменить scope к $scope

+0

В зависимости от того, $ scope' вводится, это может быть необязательно. Например, при использовании синтаксиса массива вы можете выполнять '['$ scope', function (scope) {}]' – Aron