var newservices = angular.module('newservices', []);
newservices.service('newservice', function ($http) {
return{
newdata: function(parameter){
return $http.get('/devicedetails/'+parameter).success(function(data) {
console.log(data)
return data
});
},
}
});
上述服务包含在我的一个控制器中
data=newService.newdata($scope.dummy)
console.log(data)
尝试打印数据时我得到的是$ http函数对象,如下所示
Object {then: function, catch: function, finally: function, success: function, error: function}
为什么会如此?
答案 0 :(得分:5)
你看到的不是错误。这是一个承诺。
您执行了$http
GET请求,这是异步的。 $http.get
返回将在远程请求完成时解析的承诺。在那一刻,你将获得最终价值。
请参阅此示例,其中getShops
将是您的方法newData
this.getShop = function (id, lang) {
var promise = $http.get(appRoot + 'model/shops_' + lang + '.json');
return promise;
};
在控制器中,您可以像这样使用它:
Shops.getShop($routeParams.id).then(function (response) {
console.log("data is", response.data);
$scope.shop = response.data[$routeParams.id];
});
数据准备就绪后,将其分配到范围。
在你的情况下:
var data;
newService.newdata($scope.dummy).then(function (response) {
data = response.data;
});
答案 1 :(得分:2)
您的服务正在返回promise
你应该使用这样的东西,尽管它应该有用但没有经过测试。
data = newService.newdata($scope.dummy).then(function (response) {
return response.data;
},
function (error) {
return error;
});
答案 2 :(得分:0)
你错了。
这项承诺的工作。所以在你的控制器中你需要消耗掉这些承诺。
newService.newData($scope.dummy)
.then(function (data){
$scope.data = data;
console.log(data);
});
试试这个。