目标
我想要实现的是使用服务*为我的指令保留单一的事实来源。我意识到我可以使用API调用,但问题是我正在使用的应用程序足够慢(如果可以的话,我会改变它)它不需要额外的调用。此外,除非我在每次更改时保存数据,否则在整个应用程序中对数据进行更改时,不会保持更改同步。我想从控制器和其他服务中做这样的事情:
$('button[data-toggle]').on('click', function() {
var $target = $($(this).attr('data-toggle'));
$target.toggle();
if (!$target.is(':visible')) {
$('#payment-form').data('formValidation').disableSubmitButtons(false);
}
});
这样,当服务或控制器更新function SomeController(['DataService', function() {
var dataToCollectWithoutAPICall = DataService.currentData;
}]);
function SomeService(['DataService', function() {
var dataToCollectWithoutAPICall = DataService.currentData;
}]);
时,它也会为其他人更新。
修改
应该说“更新”指令实例中的控制器/服务'。因此currentData
的更新不应更新<directive id="first"/>
的数据。但是,对<directive id="second">
数据的任何更改都应仅更新<directive id="first"/>
内所有控制器/服务的数据;
问题
如果你只有一个使用该指令的元素,这很有用,但是如果你有第二个元素,那么一个指令可以更新服务,另一个指令的数据也会更新。
从第一个指令:
<directive id="first"/>
然后第二个指令更新:
DataService.currentData = 'First Data';
第一个指令DataService.currentData = 'Second Data';
突然出现了第二个数据&#39;。
我避免将数据放在$ scope上,因为服务不能使用$ scope,然后服务不再是单一的事实来源。
问题
我愿意使用的一个想法是为每个指令创建一个唯一的标识符,例如: dataToCollectWithoutAPICall
。
我也考虑使用本地存储,但我必须支持的浏览器都不使用本地存储,我会遇到一个指令覆盖另一个指令的问题。< / p>
我愿意完全重新思考我这样做的方式。我只想要一个所有控制器/服务都能从中提取数据的SSoT。
*我使用DataService.currentData['UniqueIdentifier']
来表示服务或工厂。