保存后角度范围变量不更新

时间:2016-10-05 10:24:22

标签: angularjs

我有一个保存功能,保存更改,保存成功响应后,我调用一个get函数,从DB获取最新的更新数据。但这些变化并没有反映在视野中。

这是什么解决方案? 代码就像这样

 $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 个答案:

答案 0 :(得分:0)

$ apply带您进入角度背景。 不需要使用$ scope。$ apply,因为你使用$ http,你已经处于角度背景中。

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

将此更改为,

$scope.getUsers();

这里,setTimeout没有更新任何范围变量,没有坏处。但如果它正在更新任何范围数据。而不是使用setTimeout使用$ timeout,内部调用$ apply,因此$ digest。