我希望将JSON文件加载到工厂中,然后返回它的值。
下面是代码:
angular.module('getGuilds', [])
.factory('getGuilds', getGuilds);
getGuilds.$inject = ['$http'];
function getGuilds($http){
var obj = {content:null};
$http.get('guild/guilds.json').success(function(data) {
obj.content = data;
});
return obj;
}
问题是,它只返回值为null的对象,因此$http.get似乎没有更改obj.content的值。
之后我做了个小测试:
$http.get('guild/guilds.json').success(function(data) {
obj.content = data;
});
console.log(obj)
return obj;
}
它返回JSON数组中的这个对象:{content:null}。
然后,我将console.log放在$http.get请求中。
$http.get('guild/guilds.json').success(function(data) {
obj.content = data;
console.log(obj)
});
你猜怎么着,它注销了JSON文件。有人能帮我吗?
发布于 2015-02-23 10:24:14
$http.get异步执行get。在源代码中的成功块之后出现的代码在成功块中的代码之前运行。因此,它的表现与预期如出一辙:在您的第一次尝试中,您将记录一个未完成请求的结果。
发布于 2015-02-23 10:33:21
这是因为$http.get异步执行get。因此,在您指定值的时候,它还没有可用。您需要在成功函数中返回obj,这样修改代码应该可以使其工作:
// dataservice factory
angular
.module('getGuilds', [])
.factory('dataservice', dataservice);
dataservice.$inject = ['$http'];
function dataservice($http) {
return {
getGuilds: getGuilds
};
function getGuilds() {
return $http.get('guild/guilds.json')
.then(getGuildsComplete)
.catch(getGuildsFailed);
function getGuildsComplete(response) {
return response.data;
}
function getGuildsFailed(error) {
console.log('XHR Failed for getGuilds.' + error.data);
}
}
}
然后,在控制器中调用该数据服务:
dataservice.getGuilds()
.then(function(data) {
vm.guilds = data;
return vm.guilds;
});
显然,控制器需要更多代码才能实际工作。但这应该给你足够的信息来解决你的问题。
https://stackoverflow.com/questions/28680604
复制