ng的service的异步获取数据引起的controller之间数据同步问题
发布于 9 年前 作者 yakczh 7002 次浏览 最后一次编辑是 8 年前 来自 问答

如果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 可以在不同控制器里同步更新数据吗?

回到顶部