Переменная $scope не изменяется в функции обратного вызова, angularjs

Я хочу показать спиннер на кнопке во время выполнения функции один, а после окончания скрыть блесну, вот что я пробовал:

<div ng-controller="MyController">       
        <button ng-click="InsertData()">

            <i class="fa fa-refresh fa-spin" ng-show="loading"></i>Loading
        </button>
        <br />
        {{loading}}
    </div>

и это controller.js

angular.module('MyApp', []).controller('MyController', function ($scope) {

$scope.InsertData=function()
{
    $scope.loading = true;
    $scope.one($scope.two);

}

$scope.one = function (callback) {

    setTimeout(function () { alert("this is function one"); callback(); }, 1000);

}

$scope.two = function () {
    alert("two");
    $scope.loading = false;

}

});

но эта линия

$scope.loading = false;

не выполняется! хотя строка над ним проходит, я имею в виду предупреждение ("два")!

почему значение $scope.loading не изменяется в функции обратного вызова? Как решить эту проблему?

1 ответ

Решение

Проблема в том, что вы используете setTimeout которая является функцией Javascript, это вызовет проблемы, когда переменная области не будет обновлена ​​в области. Следовательно, мы должны использовать угловую обертку для этого, который $timeout(),

Подробнее здесь, чтобы узнать разницу между $timeout() а также setTimeout() обратитесь сюда


Ниже приводится рабочая скрипка для вопроса.

JSFiddle Demo

Другие вопросы по тегам