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

#angularjs

#angularjs

Вопрос:

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

Каково решение для этого? код выглядит следующим образом

  $scope.saveMenu = function () {
        $('.save-button').prop('disabled', true);
        $http({
            url: '/api/menu/save',
            method: 'POST',
            data: 'aff='  JSON.stringify($scope.aff)   'amp;menuAccess='  JSON.stringify($scope.menuAccess)   'amp;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. Будет сложно ответить без фрагмента кода

2. Добавлен пример кода

3. Вещь: вам нужно вызывать события jquery в $timeout() … not — это то же самое, что и ваш setTimeout.

Ответ №1:

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

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

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

 $scope.getUsers();
  

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