我有两张桌子的页面。我需要对两个表做一些操作,在外部触发:视图控制器中的一些函数。
因此,两个表都有相同的方法和变量,我应该在视图控制器中使用按钮和输入重新加载或搜索两个表。就是这样。
我想要的是分隔表 - 我不想调用reloadTable1和reloadTable2,并使用范围内的table1Data和table2Data来渲染它。
第一个想法是为每个表创建服务。但问题是数据渲染,当我使用变量来渲染它时。 以下是示例:http://plnkr.co/edit/bzgvtFzRWUDad1CR4mZV?p=preview。 没有真正相关,但问题:为什么它不起作用?我知道解决方法 - 使用访问器,但我真的不想为每个变量创建函数!我想为2个服务使用相同的类,但有差异 - 一个参数。
第二个想法使用3个控制器:每个表为父级和1个,使用$ scope重新加载表。$ broadcast。但我真的不喜欢这个想法:它使用事件(我不认为在这种情况下使用它是好主意)并且它将使用额外的控制器。另外,我认为,在这里使用服务是个好主意。
有任何建议吗?
答案 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)