angular js:两个控制器共享的异步数据

时间:2015-09-20 22:56:57

标签: angularjs

我很难解释我的问题,但我会尽力做到最好 我有一个带有控制器A的表格和带有控制器B的ng-transclude的指令 当我启动脚本时,我正在发送一个ID参数,我调用一个$ http.get的服务。我做了一个承诺

控制器A:

 if($routeParams.id){
    formFunc.get($routeParams.id).then(
      function (data){
         this.data = data;
         console.log("1"+this.data);
      }
    );
 }  
 console.log("2"+this.data);

控制器B:

 this.fields = $scope.data.fields; 
 console.log("3"+$scope.data.fields);

我在控制台中:2未定义 - > 3 undefined - > 1对象
所以我很好地检索了控制器A中的数据,但没有与控制器B的任何绑定 数据是一个对象{“fields”:{...},“title”:...}

希望问题清楚

1 个答案:

答案 0 :(得分:0)

首先,您应该了解$ scope是每个控制器的本地。

要在控制器之间共享数据,您可以使用服务或事件。

  • 使用来自控制器A的服务集数据。

    if($routeParams.id){
    formFunc.get($routeParams.id).then(
      function (data){
         this.data = data;
         console.log("1"+this.data);
         fromFunc.setData(data); // <---- better, do the setting inside fromFunc, just to show you 
      });
     }  
    
  • 从控制器B中注意此服务的更改

    $scope.$watch(
       function(){
          return fromFunc.getData();
       }, 
    
       function(newValue, oldValue){
        if(oldValue !== newValue){
           $scope.data = newValue; // <----- getting the data from service when data changes.
        }
    })