ng.module('app')
.service('CardService', ['$http', CardService])
function CardService($http) {
this.$http = $http;
var self = this;
$http.get('http://localhost:3000/db').success(function(data) {
self.items = data;
console.log(self.items);
});
console.log(self.items);
}
CardService.prototype.list = function() {
console.log(self.items);
return this.items;
};
和结果
service.js:14 undefined
service.js:18 undefined
service.js:18 undefined
service.js:12 [Object,Object,Object]
如何解决这个问题?
答案 0 :(得分:0)
ajax调用是异步的。它将允许线程在等待来自.get
的响应时继续运行然后将按此顺序调用您正在执行的console.log。
console.log
正好在你的ajax电话下面console.log
(在ajax成功之内)
console.log
console.log
低于self.items = data
不是有角度的方式,但......只有在ajax调用中初始化列表时才应使用原型。
答案 1 :(得分:0)
根据最佳实践,您应该使用所有与http请求相关的内容来使用工厂或服务获取数据。因为它是异步流,所以$ q将用于处理它。所以你的功能将如下所示完成。如果我误解了你的问题,请纠正我。
app.factory('CardService',function($http,$q) {
var obj = {};
obj.getCardServiceData = function(){
var defer = $q.defer();
$http.get('http://localhost:3000/db').then(function(response) {
defer.resolve(response.data);
},function(error){
defer.reject(error);
});
return defer.promise;
}
return obj;
});
app.controller('YOUR CONTROLLER',function($scope,CardService){
CardService.getCardServiceData().then(function(response){
$scope.self = response.data;
console.log($scope.self);
},function(error){
alert("There seems to be some error!");
console.error(error);
});
});