Переменная угловой области не обновляется после сохранения

У меня есть функция сохранения, в которой сохраняются изменения, и после успешного ответа save я вызываю функцию get, которая извлекает последние обновленные данные из БД. Но изменения не отражаются в представлении.

Какое решение для этого?
код такой

 $scope.saveMenu = function () {
        $('.save-button').prop('disabled', true);
        $http({
            url: '/api/menu/save',
            method: 'POST',
            data: 'aff=' +JSON.stringify($scope.aff) + '&menuAccess='+ JSON.stringify($scope.menuAccess) + '&brokerId=' + $scope.filter.business_filter,
            headers:{'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'}
        }).success(function (response) {
            var oResponse = angular.fromJson(response);
            $('.save-button').prop('disabled', false);
            if (oResponse.success) {
                $scope.$apply(function() {
                    $scope.getUsers();
                });

                $('.save').fadeIn();
                setTimeout(function () {
                    $('.save').fadeOut();
                }, 2000);

            } else {
                $window.location.href = $rootScope.ng_url + '/error/' + oResponse.status_code;
            }
        });
    }

    $scope.getUsers = function () {
        $scope.filter.view_group_filter = ($scope.filter.view_group_filter != '') ? $scope.filter.view_group_filter : 0;

        if ($scope.filter.business_filter != -5) {
            $('#group').attr('disabled', true);
        } else {
            $('#group').attr('disabled', false);
        }

        $http.get('/api/menu/users/' + $scope.filter.business_filter + '/' + $scope.filter.view_group_filter)
            .then(
                function (response) {
                    // success callback
                    var oResponse = angular.fromJson(response.data);
                    if (oResponse.success) {
                        $scope.aff = oResponse.data.Aff;
                    } else {
                        $window.location.href = $rootScope.ng_url + '/error/' + oResponse.status_code;
                    }
                }
            );
    }

1 ответ

  1. $apply вводит вас в угловой контекст.
    Нет необходимости использовать $scope.$apply поскольку вы используете $http, вы уже находитесь в угловом контексте.

    $scope.$apply(function() {
      $scope.getUsers();
    });
    

    Измените это на,

    $scope.getUsers();
    

    Здесь setTimeout не обновляет переменную области, нет вреда. Но если он обновляет какие-либо данные области. Вместо использования setTimeout используйте $timeout, который внутренне вызывает $apply и, следовательно, $digest.