我有一堆按层次排列的组件,即:
合作伙伴组件,知道如何更新或删除它们,等等;
领导者组件,知道如何与领导者组织打交道;
列表组件,然后向用户显示合作伙伴和领导者组织;
服务-当合作伙伴或领导者组件删除组织时,该组织的信息将传递到列表组件,以便这些更改立即反映在最前面。
我不能为此提供代码示例,因为它太大了,而且我的问题主要需要概念性的建议,而不是代码问题。 现在,它可以正常工作-组件正在完成将数据发送到服务的工作:
IndexCollection.setIndexes(
vm.leaderIndex, vm.partnerIndex, 'added_l', response.id
);
服务完成其工作,并将更改推送到变量,我在列表组件中$watch
触发了相应的操作,例如:
$scope.$watch(() => IndexCollection.indexes, function() {
let indexes = IndexCollection.indexes;
switch (indexes.message) {
case 'deleted_p':
removePartner(indexes);
break;
case 'deleted_l':
removeLeader(indexes);
break;
case 'added_l':
addLeader(indexes);
break;
}
});
我的问题更具理论意义。是否有可能在不使用$watch, $emit, $broadcast
和我们通常在这方面使用的其他标准工具的情况下,通过列表组件中的服务触发实时操作?
我可以通过使用回调以某种方式获得相同的结果吗?我的意思是,当服务发生变化时,它会触发相应控制器中的立即采取行动吗?
答案 0 :(得分:0)
虽然使用$ watch可以解决问题,但这不是最有效的解决方案。 您可能想要更改更新和检索服务数据的方式。
组件控制器应基于组件触发的操作/事件,使用服务中的功能来操作存储在服务中的数据,然后将服务注入组件中。
MyDataService.getIndexCollection() {}
MyDataService.putIndexCollection() {}
然后,通过组件的require或绑定或指令的隔离作用域将数据传递给所有指令和组件。
例如,一旦合作伙伴组件编辑了服务上的数据,您将再次从服务中获取数据,并且更新后的数据将被传递到列表组件,并在需要时通过$ apply()更新视图。