0
我有一個服務調用API並獲取json響應。我將這個服務注入到我的控制器中,並嘗試用這個接收到的數據設置$ scope.tank變量。當我嘗試稍後使用這個變量時(在同一個控制器中!)它是未定義的。但有趣的是,數據顯示在前端。
我看遍了所有的stackoverflow,我無法弄清楚這一點。我創建了一個plunker例子 - http://plnkr.co/edit/DkFNE8E9897dSF19eaU9?p=preview
我的服務:
appServices.service('TankService', function($q, $http) {
var data, deferred = $q.defer();
return {
init: function(id) {
var defer = $q.defer();
$http.get(options.api.base_url, { cache: 'true'})
.success(function(response) {
data = response;
deferred.resolve(data);
});
},
// return promise
getData: function() {
return deferred.promise;
}
};
});
我打電話給我的數據,控制器是這樣的:
appControllers.controller('TankViewCtrl', ['$rootScope', '$scope', '$q', '$routeParams', '$location', '$sce', '$route', 'TankService',
function TankViewCtrl($rootScope, $scope, $q, $routeParams, $location, $sce, $route, TankService) {
var id = $routeParams.tank_id;
$scope.id = id;
$scope.tank = [];
// call our data
TankService.init(id);
TankService.getData().then(function(data){
$scope.tank = data;
});
// why is this undefined?
console.log($scope.tank);
}
]);
預先感謝您的幫助!
謝謝您的回答。那麼在這個控制器內部沒有辦法進一步處理數據?我需要這個分頁。 – 2014-09-03 15:42:46
是的,你可以。只要確保你的承諾解決後,就用'then'調用的函數來做。 – Goodzilla 2014-09-03 15:47:39
我很蠢。謝謝。我現在看到,我幾乎按照我應該做的那樣做,但是失敗了最基本的東西:D – 2014-09-03 16:01:48