angualrjs在service中get请求能得到数据,但是却无法返回到控制器当中使用。
var data=
[
{Name:'name1'},
{Name:'name2'},
{Name:'name3'}
]
app.factory('Items', function($http) {
var list=
[
{Name: 'name4'},
{Name: 'name5'},
];
$http.get("http://localhost:3000/test").success(function(data) {
list=data;//get到的数据赋给list
console.log(list[0].Name);
});
alert('success');
return {
query:function()
{return list;},
}
});
app.controller('ctrl', function($scope,Items) {
$scope.names=Items.query();
});
-
{{ x.Name }}

可以看到,console.log打印出了从服务端get到的数据。我在想可能是http.get是异步函数,于是加了一个alert阻塞,但factory返回的还是原来的旧数据。请问大家如何解决呢?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
你需要$q 这个解决。。因为。。你在异步结果返回之前。。已经将return 返回了。。当然controller取不到数据了。。。
service
controller
应该返回函数,而不是返回数据
确实是异步的问题。
不过想用alert的方法来阻塞……我感觉是不行的……感觉总有点怪怪的……明天起床再验证下……
用楼上的方法,将请求放到返回的对象里,应该是可行的。
还有一个方法你可以试下,不要直接list=data ,这样重写了list,引用也没了。可以试试用数组的push,pop方法导入数据,或者直接list[0]=...这样,应该就能保留引用以更新数据了 。
获取数据是异步的,当进入页面时数据还没回来,所以显示的还是旧数据,
用$q的正解