представление не обновляется после завершения обещания - PullRequest
0 голосов
/ 06 ноября 2019

Я использую угловую 1.

Я использую переменную "isWorking" для отображения загрузчика.

Я вызываю обещание, но когда обещание закончено, спиннер загружаетсядаже если я установил «isWorking» в false.

Мой контроллер:

/** @ngInject */
export default function (
MyFactory
) {
    var ctrl = this;
    ctrl.isworking = false;


    ctrl.submit = function () {
        ctrl.isworking = true;

        MyFactory.callCreate({}, {liste: ctrl.args}).$promise.then(function (response) {
            ctrl.isWorking = false;
            console.log(ctrl.isWorking);
        }, function (error) {
            ctrl.isWorking = false;
            console.log(ctrl.isWorking);
        });

    };
}

Выдержка из моего взгляда:

<button type="submit" class="button"
        ng-disabled="myCtrl.isworking"
        ng-click="myCtrl.submit()">
    <i ng-show="myCtrl.isworking" class="fa fa-spinner"></i> submit
</button>

как я могу сделать это правильно?

спасибо

Ответы [ 2 ]

1 голос
/ 06 ноября 2019

Рабочий пример здесь: https://stackblitz.com/edit/stackoverflow-answer-58730526. Это проблема асинхронного. Вы можете использовать $scope.$evalAsync(() => { /* Your changes of bindings */ }); или просто позвонить $scope.$digest(); после изменения привязок. Но будьте осторожны с ошибкой $digest already in progress в этом случае.

0 голосов
/ 06 ноября 2019

Одна из возможностей заключается в том, что обещание не интегрировано с платформой AngularJS. Попробуйте преобразовать его в обещание AngularJS:

/** @ngInject */
export default function (
MyFactory, $q
) {
    var ctrl = this;
    ctrl.isworking = false;


    ctrl.submit = function () {
        ctrl.isworking = true;

        var promise = MyFactory.callCreate({}, {liste: ctrl.args}).$promise;
        var angularPromise = $q.when(promise);
        angularPromise.then(function (response) {
            ctrl.isWorking = false;
            console.log(ctrl.isWorking);
        }, function (error) {
            ctrl.isWorking = false;
            console.log(ctrl.isWorking);
        });    
    };
}

Метод $q.when оборачивает объект, который может быть значением или сторонним обещанием, в обещание $ q. Это полезно, когда вы имеете дело с объектом, который может или не может быть обещанием, или если обещание исходит от источника, которому нельзя доверять.

Для получения дополнительной информации см.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...