[英]DOM not updating on $http POST request with MEAN stack
我有一個在Mongo數據庫上執行CRUD操作的應用程序。 我有一個表單輸入,並希望在添加時實時列出表單下方的元素。 到目前為止,這些元素僅出現在頁面刷新上。 但是,我有一個“ x”調用ng-click
來刪除該項目(然后從數據庫中刪除該項目),這些項目將立即從DOM中消失(無需刷新頁面)。 我正在以相同的方式執行POST和DELETE請求,對兩者都使用了promise。 我不知道為什么刪除請求會自動更新DOM,但發布請求卻不會。
這是我的控制器:
app.controller('ListController', function($scope, PlaceService) {
$scope.places = [];
getPlaces();
function getPlaces() {
PlaceService.findAll().then(function(promise) {
// $scope.places updates correctly, but DOM doesn't show it
$scope.places = promise.data
});
};
$scope.submit = function(place) {
if (!place) return alert('No content submitted');
PlaceService.submit(place).then(function(data) {
getPlaces();
}, function(error) {
console.log(error)
}
};
$scope.remove = function(id) {
PlaceService.remove(id).then(function(data) {
getPlaces();
}, function(error) {
console.log(error)
}
}
});
PlaceService
是與API通信的工廠,如下所示:
app.factory('PlaceService', function($http, $q) {
return {
findAll: function() {
var deferred = $q.defer();
$http.get('/places').then(function(response) {
console.log('Get Request Successful');
return deferred.resolve(response);
}, function(err) {
return console.log(err);
});
return deferred.promise;
},
remove: function(id) {
var deferred = $q.defer();
$http.delete('/places/' + id).then(function(response) {
console.log('Delete Successful');
return deferred.resolve(response);
}, function(err) {
return console.log(err);
});
return deferred.promise;
},
submit: function(entry) {
var deferred = $q.defer();
var jObj = JSON.stringify(entry);
$http.post('/places', jObj).then(function(response) {
console.log('Post Successful');
return deferred.resolve(response);
}, function(err) {
return console.log(err);
});
return deferred.promise;
}
}
});
我試圖讓$scope.places
反映DOM中的更新,我試圖將$scope.places
表達式包裝在$timeout
但無濟於事。
TLDR: $scope.places
不反映控制器中所做的更改
你要使用.then()
在$scope.submit
和$scope.remove
功能,以確保您的getPlaces()
函數只在一次運行后或DELETE完成。
PlaceService.submit(place)
是$q
承諾。 這意味着,如果您要調用getPlaces();
成功提交“位置”后,應將其放置在回調中:
PlaceService.submit(place)
.then(function(data) {
getPlaces();
}, function(error) {
// handle your error
});
您還將希望以相同的方式處理PlaceService.remove(place)
方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.