我有一个保存功能,保存更改,保存成功响应后,我调用一个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;
}
}
);
}
答案 0 :(得分:0)
$ apply带您进入角度背景。 不需要使用$ scope。$ apply,因为你使用$ http,你已经处于角度背景中。
$scope.$apply(function() {
$scope.getUsers();
});
将此更改为,
$scope.getUsers();
这里,setTimeout没有更新任何范围变量,没有坏处。但如果它正在更新任何范围数据。而不是使用setTimeout使用$ timeout,内部调用$ apply,因此$ digest。