Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 如何使用一个控制器在同一视图上组织两个表_Angularjs_Architecture_Angularjs Scope - Fatal编程技术网

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

Angularjs 如何使用一个控制器在同一视图上组织两个表,angularjs,architecture,angularjs-scope,Angularjs,Architecture,Angularjs Scope,我有一页有两张桌子。我需要对两个表进行一些操作,在外部触发:视图控制器中的一些函数 所以,两个表都有相同的方法和变量,我应该在视图控制器中使用按钮和输入重新加载或搜索这两个表。就是这样 我想要的是分离表-我不想调用reloadTable1和reloadTable2,并在作用域中使用table1Data和table2Data来呈现它 第一个想法是为每个表创建服务。但问题是数据渲染,当我只使用变量来渲染它时。 以下是示例:不是很相关,但问题是:为什么它不起作用?我知道解决方法-使用访问器,但我真的不

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

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

我想要的是分离表-我不想调用reloadTable1和reloadTable2,并在作用域中使用table1Data和table2Data来呈现它

第一个想法是为每个表创建服务。但问题是数据渲染,当我只使用变量来渲染它时。 以下是示例:不是很相关,但问题是:为什么它不起作用?我知道解决方法-使用访问器,但我真的不想为每个变量创建函数我想对2个服务使用同一个类,但有一个参数不同

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


有什么建议吗?

如果我需要在控制器之间共享数据,我通常会使用服务

例如:

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


  <div ng-controller="controller2">
    {{service.data | json }}
  </div>
您还可以使用
$scope.$broadcast
。或者,如果要从服务内部生成事件,请使用
$rootScope.$broadcast
(需要注入$rootScope)

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));
            }
        }
    }
});