ng的service的异步获取数据引起的controller之间数据同步问题
如果service 返回的是 [‘John’, ‘James’, ‘Jake’]; 这样的初始化数据,其他controller里调用 service的user就可以共享数据和同步更新 但是如果是异步获取, 其他controller里调用 service获取数据的方法,这样就没办法共享数据和同步更新 用代码说明
var app=angular.module("app",[]);
app.service('userService', function($http){
//this.users = ['John', 'James', 'Jake']; 初始化数据 ,在FirstController 里面可以得到数据
$http.get('content.json').success(function(data) {
this.users=data; // 异步获取的话 Controller 里面就得不到数据
});
});
app.controller("FirstController",["$http","userService",function($http,userService){
console.log(userService.users);
}])
app.controller("SecondController",["$http","userService",function($http,userService){
console.log(userService.users);
}])
上面的输出都为空
userService必须用 $q来获取数据
return {
query : function() {
var deferred = $q.defer();
$http({method: 'GET', url: 'content.json'}).
success(function(data, status, headers, config) {
deferred.resolve(data);
}).
error(function(data, status, headers, config) {
deferred.reject(data);
});
return deferred.promise;
} // end query
};
但这样的话, 其他controller里面只能用异步来获取数据 比如
var promise = userService.query();
promise.then(function(data) {
$scope.user = data;
}
这样的话,如果 FirstController 里面修改了数据, SecondController 里面就得到不到修改的数据 还是原来的
6 回复
。。。楼主看下ngResources吧,获取数据什么的必然是在控制器里面异步获取。
@violet-day 我想在列表页列出数据据,对选中的纪录弹出Div进行修改,修改后直接更新到数据列表上,不用象传统后台那样,修改完了还要重新从服务器再查一次 ,象这种需求怎么实现,有没有参考的例子?
@yakczh 我记得好像在你另外一个帖子里面回复过你了吧,看3楼的
js是异步执行的当然获取不到数据了。
@violet-day ngResources 可以在不同控制器里同步更新数据吗?