我在我的angularjs應用程序中遇到了一個奇怪的行爲。Angularjs - 使用服務加載數據顯示的是前一頁的數據,而不是當前的數據
基本上,我有一個從JSON文件加載數據的服務。
我從這項服務中兩個選項:
1加載所有數據
2 - 僅加載,我需要基於URL
這裏的數據是服務代碼:
.service ('myService', ['$http', '$stateParams', '$q', function ($http, $stateParams, $q){
var myService = this;
var defer = $q.defer();
myService.all = {};
myService.one = {};
myService.all = function(){
$http.get('data.json').success(function (res){
myService.all = res.data;
defer.resolve(res.data)
})
return defer.promise;
}
myService.one = function (urlID){
$http.get('data.json').success(function(res) {
angular.forEach(res.data, function(item) {
console.log (item, parseInt(urlID))
if (item.id === parseInt(urlID)) {
console.log("id equality: true")
myService.oneZone = item;
} else {console.log("id equality: false")}
});
});
return defer.promise
}
return myService;
}])
然後我從我的控制器調用這個:
.controller('detailsCtrl', ['$scope', '$stateParams', 'myService', function($scope, $stateParams, myService) {
$scope.fromURL = $stateParams.myID
myService.one($scope.fromURL).then(function(res){
$scope.onlyOne = myService.oneZone
})
}])
但數據顯示錯誤。
這是比較容易的方式看到它在這裏的行動:https://plnkr.co/edit/qBtT5gkVSkYfjbngZVqw?p=preview
要重現此,這裏是你必須做的:
1 - 一旦打開,點擊任何按鈕(例如)
2-在下頁將有一個空範圍(稱爲onlyOne)
3-回去並點擊另一按鈕(例如)
4- onlyOne範圍是從你按下第一按鈕()
爲什麼它這樣做呢?
謝謝
這是一個好的角的方式做我想要達到什麼目的?我也非常關心內存泄漏和「錯誤的方式」 – Nick
謝謝。你認爲使用承諾或不使用承諾會更好嗎?你通常用什麼來做這樣的事情? – Nick
是的,它看起來相當不錯。用.then替換所有的.success並刪除多餘的promise創建。 –