2014-02-25 94 views
0

我有两个表的页面。我需要对这两个表进行一些操作,在外部触发:视图控制器中的一些功能。如何组织一个控制器在同一视图上的两个表

所以,这两个表都有相同的方法和变量,我应该重新加载或搜索两个表与按钮和视图控制器输入。就是这个。

我想要的是分开表 - 我不想调用reloadTable1和reloadTable2,并在范围内使用table1Data和table2Data来呈现它。

第一个想法是为每个表格创建服务。但是,当我使用变量来渲染它时,问题是数据渲染。 这里是例子:http://plnkr.co/edit/bzgvtFzRWUDad1CR4mZV?p=preview没有真正相关,但问题:为什么它不起作用?我知道解决方法 - 使用访问器,但我真的不想为每个变量创建函数!我想为2个服务使用相同的类,但有差异 - 一个参数。

第二个想法使用3个控制器:parent和每个表1,使用$ scope。$ broadcast重新加载表。但我不太喜欢这个想法:它使用事件(我不认为在这种情况下使用它是个好主意),它会使用额外的控制器。另外,我认为,在这里使用服务是个好主意。

任何建议?

回答

0

如果我需要在控制器之间共享数据,我通常会这样做,我使用的是服务。

I modified your Plunker to demostrate

例子:

<div ng-controller="main"> 
    {{service.data | json }} 
    <button ng-click="service.query()">refresh data</button> 
    </div> 


    <div ng-controller="controller2"> 
    {{service.data | json }} 
    </div> 

控制器和服务:

app.controller('controller1', function($scope, myservice) { 
    $scope.service = myservice; 
}); 

app.controller('controller2', function($scope, myservice) { 
    $scope.service = myservice; 
}); 

app.service('myservice', function() { 
    return { 

     data: [], 

     query: function() { 
      for (var i in [1, 2, 3]) { 
       this.data.push(Math.floor((Math.random() * 100) + 1)); 
      } 
     } 
    } 
}); 

你也可以使用$scope.$broadcast。或者如果你想从服务内部生成事件使用$rootScope.$broadcast(你需要注入$ rootScope)

相关问题