我正在使用以下代码。我正在读一个json文件名是&#34; hassan.json&#34;。如果我通过$ http在控制器中读取此文件一切正常。但我想使用我从文件中读取的数据,一次又一次地在不同的控制器中,所以我为此做了一个服务。但是当我通过$ http.get()从json文件中读取数据时正在服务中,当我在我的控制器和console.log(数据)中调用该服务方法时返回<strong>它返回我这在控制台&#34; e {$$ state:object}。&#34;
这是控制器:
app.controller('showdata', function($scope, service){
$scope.mydata = service.getData().then(function(user){
$scope.mydata = (user.data);
console.log(($scope.mydata));
});
});
这是服务我正在使用:
app.service('service', function($http, $q){
var outData;
this.getData = function() {
if (this.outData === undefined) {
var deferred = $q.defer();
$http.get('jsons/hassan.json')
.then(function(data){
this.outData = data;
deferred.resolve(data);
},
function(err) {
deferred.reject(err);
});
return deferred.promise;
}
else {
return this.outData;
}
}
});
答案 0 :(得分:3)
$http
本身就是一个承诺,因此$q
中没有必要尝试使用$http
&#39; s cache
重写您的代码:
app.controller('showdata', function($scope, service){
service.getData().then(function(user) {
// no need to call user.data, service handles this
$scope.mydata = user;
console.log($scope.mydata);
}).catch(function (err) {
// handle errors here if needed
});
});
和
app.service('service', function($http){
this.getData = function() {
return $http({
method: 'GET',
url: 'jsons/hassan.json',
// cache will ensure calling ajax only once
cache: true
}).then(function (data) {
// this will ensure that we get clear data in our service response
return data.data;
});
};
}});
答案 1 :(得分:1)
按如下方式更改控制器:
app.controller('showdata', function($scope, service){
service.getData().then(function(user){
$scope.mydata = (user.data);
console.log(($scope.mydata));
});
});
答案 2 :(得分:0)
$http.get().then()
和$http.get().success()
之间存在差异
将您的代码更改为:
var deferred = $q.defer();
$http.get('jsons/hassan.json')
.success(function(data){
this.outData = data;
deferred.resolve(data);
})
.error(function(err) {
deferred.reject(err);
});
return deferred.promise;