#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 .