我试图在我的控制器中保存$ http服务的返回值,但我得到了#34; undefined"喜欢回应
在我的控制器中,我调用了一个使用$ http:
的服务//this returns undefined
vm.user_instruments = instruments.getInstruments();
我的服务:
function instruments($http){
this.getInstruments = function(){
$http.get('url/').
then(function(response) {
/*this console.log print the response,
but this value I can't get it in my controller*/
console.log(response.data);
return response.data;
}, function(error) {
return error.data;
});
}
}//end service
那么,我做错了什么?我的目的是控制器不知道HTTP的任何细节
答案 0 :(得分:1)
几个问题。首先,您的服务功能没有返回任何内容....从中返回$http
。
this.getInstruments = function(){
// return the request promise
return $http.get('url/').
then(function(response) {
return response.data;
}, function(error) {
return error.data;
});
}
然后在控制器中为promise回调分配范围:
instruments.getInstruments().then(function(data){
vm.user_instruments = data
});
答案 1 :(得分:1)
您有两种选择:
function service ($http) {
this.request = function () {
return $http.request({ /*...*/ });
};
}
function controller (service) {
service.request().then(function (resp) {
console.log(resp);
});
}
function service ($http) {
this.request = function (callback) {
return $http.request({ /*...*/ }).then(function (resp) {
callback(null, resp);
}, function (err) {
callback(err);
});
};
}
function controller (service) {
service.request(function (err, resp) {
if (err) return console.log(err);
console.log(resp);
});
}
答案 2 :(得分:0)
试试这种方式
服务:
function instruments($http){
this.get = function(callback){
$http.get('/url').success(function(res){
callback(res);
});
}
} /* end service */
控制器:
instruments.get(function(res){
vm.instruments = res;
});
它应该工作。 PS:输入手机。