ng-disabled на кнопках, но он не обновляется, когда я меняю значение

У меня есть следующие кнопки:

    <button id="facebook" type="button" ng-disabled="signing" ng-click="fblogin()">FACEBOOK</button>
    <button id="google" type="button" ng-disabled="signing" ng-click="googleLogin()">GOOGLE</button>

Например, когда я нажимаю кнопку Google, он делает следующее:

$scope.googleLogin = function() {
    $scope.signing = true;
    document.getElementById('googleAuth').click();
};

Мой гапи делает это:

  gapi.load('auth2', function(){
                      // Retrieve the singleton for the GoogleAuth library and set up the client.
                      auth2 = gapi.auth2.init({
                        client_id: 'MY ID',
                        cookiepolicy: 'single_host_origin',
                        scope: 'email',
                        // Request scopes in addition to 'profile' and 'email'
                        //scope: 'additional_scope'
                      });
                      attachSignin(document.getElementById('googleAuth'));
                    });

И кнопка становится неактивной, и это здорово, потому что я меняю $scope.signing на TRUE.

НО когда возвращаюсь делаю так: $scope.signing = false; и ничего не меняется, кнопка остается неактивной. Почему он не включает себя, когда я меняю подпись на false, мне нужно как-то сообщить html, чтобы обновить статус кнопок?


person rosu alin    schedule 16.03.2017    source источник
comment
Заключите $scope.signing = false; в блок $scope.$apply. Это может решить проблему   -  person surajck    schedule 16.03.2017
comment
Если вы используете $scope.signing = {"result":false} и измените свою кнопку на ng-disabled="signing.result", это должно сработать. По сути, использование для этого примитивов (bool, число, строка) вместо сложных типов (массив, объект) даст неожиданные результаты.   -  person grimmdude    schedule 16.03.2017
comment
Большое спасибо, surajck, добавив $apply, все заработало.   -  person rosu alin    schedule 16.03.2017


Ответы (1)


Благодаря Surajck я заставил его работать, установив его внутри $apply, вот так:

$scope.$apply(function () {
        $scope.signing = false;
    });
person rosu alin    schedule 16.03.2017