服务不会以角度向控制器返回数据
service does not return data to controller in angular
这是我的服务:
app.service('trackService', ['$http', function($http) {
var data;
this.topTracks = function(limit) {
$http({
method: 'GET',
url: 'http://ws.audioscrobbler.com/2.0/?method=chart.gettoptracks',
params: {api_key: 'e8452c5962aafbb3e87c66e4aaaf5cbf', format: 'json', limit: limit}
}).success(function(result) {
this.data = result.tracks; console.log(this.data); return this.data;
});
}
}]);
和控制器-
app.controller('artistSongsCtrl', ['$scope', 'trackService', function($scope, trackService) {
$scope.data = trackService.topTracks(10);
//console.log($scope.data);
}]);
如何在自定义服务中使用$http服务将数据发送到controller?
几个问题是$http
是异步的,并且您的服务方法topTracks()
不返回任何内容。此外,您不能返回success
内部,无处返回。。。使用then()
代替
您需要从服务返回promise,并在控制器中的promise回调中设置作用域
app.service('trackService', ['$http',
function($http) {
var data;
var self = this;
this.topTracks = function(limit) {
return $http({
method: 'GET',
url: 'http://ws.audioscrobbler.com/2.0/?method=chart.gettoptracks',
params: {
api_key: 'e8452c5962aafbb3e87c66e4aaaf5cbf',
format: 'json',
limit: limit
}
}).then(function(result) {
self.data = result.data.tracks;
console.log(self.data);
return self.data;
});
}
}
]);
app.controller('artistSongsCtrl', ['$scope', 'trackService',
function($scope, trackService) {
trackService.topTracks(10).then(function(data) {
$scope.data = data;
//console.log($scope.data);
});
}
]);
在您的服务中,您正在发出异步GET请求。为了让控制器捕获该响应,您需要返回一个promise。下面是一个使用$q:的示例
app.service('trackService', ['$http', '$q', function($http, $q) {
var data;
this.topTracks = function(limit) {
var d = $q.defer();
$http({
method: 'GET',
url: 'http://ws.audioscrobbler.com/2.0/?method=chart.gettoptracks',
params: {api_key: 'e8452c5962aafbb3e87c66e4aaaf5cbf', format: 'json', limit: limit}
}).success(function(result) {
this.data = result.tracks;
console.log(this.data);
d.resolve(this.data);
});
return d.promise;
}
}]);
相关文章:
- 从控制器返回后Ajax启动事件激发
- 从我的控制器返回一个不同于200的代码以触发ajax错误,这被认为是一种好的做法吗
- 将从控制器返回的selectbox值动态呈现为json
- 如何从服务器端控制器返回或调用已签名的小程序的方法
- 如何从控制器返回对象列表并使用JQuery(SpringMVC,ajax)显示它们
- 无法使用.ajax调用显示MVC控制器返回的属性值
- 从ajax到控制器返回的变量为null
- 服务不会以角度向控制器返回数据
- 通过 ID 获取元素,为 Sencha 控制器返回 null
- 是否可以使控制器返回模式窗口的数据?MVC5 ASP.NET
- Laravel 5.2 - 在 ajax 请求后从控制器返回视图
- CodeIgniter - 如何从控制器返回 Json 响应
- C# mvc - 控制器返回部分视图或 json 数据
- 从控制器返回 javascript 以查看
- jQuery解析从控制器返回的JSON结果
- 控制器返回纯json数据,而不是停留在页面上
- 从 mvc 控制器返回两个 dienstional 数组作为 json
- 从控制器返回Json数据以查看ASP.NET MVC
- 使用工厂和控制器返回数据
- $http没有从Spring MVC REST控制器返回值