如何使用一个控制器在同一视图上组织两个表

时间:2014-02-25 14:22:09

标签: angularjs architecture angularjs-scope

我有两张桌子的页面。我需要对两个表做一些操作,在外部触发:视图控制器中的一些函数。

因此,两个表都有相同的方法和变量,我应该在视图控制器中使用按钮和输入重新加载或搜索两个表。就是这样。

我想要的是分隔表 - 我不想调用reloadTable1和reloadTable2,并使用范围内的table1Data和table2Data来渲染它。

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

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

有任何建议吗?

1 个答案:

答案 0 :(得分: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)