AngularJS用于多个DIrectives的服务/工厂中的单一真实来源

时间:2016-04-22 10:17:42

标签: javascript angularjs

目标

我想要实现的是使用服务*为我的指令保留单一的事实来源。我意识到我可以使用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; }]); 时,它也会为其他人更新。

修改 应该说“更新”指令实例中的控制器/服务&#39;。因此currentData的更新不应更新<directive id="first"/>的数据。但是,对<directive id="second">数据的任何更改都应仅更新<directive id="first"/>内所有控制器/服务的数据;

问题

如果你只有一个使用该指令的元素,这很有用,但是如果你有第二个元素,那么一个指令可以更新服务,另一个指令的数据也会更新。

从第一个指令:

<directive id="first"/>

然后第二个指令更新:

DataService.currentData = 'First Data';

第一个指令DataService.currentData = 'Second Data';突然出现了第二个数据&#39;。

我避免将数据放在$ scope上,因为服务不能使用$ scope,然后服务不再是单一的事实来源。

问题

  1. 是否可以隔离每个指令的数据?
  2. Angular中的每个指令都有一个唯一的标识符,控制器/服务知道吗?
  3. 有没有人知道解决这个问题?
  4. 我愿意使用的一个想法是为每个指令创建一个唯一的标识符,例如: dataToCollectWithoutAPICall

    我也考虑使用本地存储,但我必须支持的浏览器都不使用本地存储,我会遇到一个指令覆盖另一个指令的问题。< / p>

    我愿意完全重新思考我这样做的方式。我只想要一个所有控制器/服务都能从中提取数据的SSoT。

    *我使用DataService.currentData['UniqueIdentifier']来表示服务或工厂。

0 个答案:

没有答案