Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.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
Javascript AngularJS针对多个指令的单一服务/工厂真理来源_Javascript_Angularjs - Fatal编程技术网

Javascript AngularJS针对多个指令的单一服务/工厂真理来源

Javascript AngularJS针对多个指令的单一服务/工厂真理来源,javascript,angularjs,Javascript,Angularjs,目标 我试图实现的是使用一个服务*为我的指令保留唯一的真相来源。我意识到我可以使用API调用,但问题是我正在使用的应用程序速度太慢(如果可以的话,我会改变它),它不需要额外的调用。另外,除非我在每次更改时都保存了数据,否则在整个应用程序中对数据进行更改时不会保持更改同步。我想从控制器和其他服务中执行类似操作: function SomeController(['DataService', function() { var dataToCollectWithoutAPICall = Dat

目标

我试图实现的是使用一个服务*为我的指令保留唯一的真相来源。我意识到我可以使用API调用,但问题是我正在使用的应用程序速度太慢(如果可以的话,我会改变它),它不需要额外的调用。另外,除非我在每次更改时都保存了数据,否则在整个应用程序中对数据进行更改时不会保持更改同步。我想从控制器和其他服务中执行类似操作:

function SomeController(['DataService', function() {
    var dataToCollectWithoutAPICall = DataService.currentData;
}]);

function SomeService(['DataService', function() {
    var dataToCollectWithoutAPICall = DataService.currentData;
}]);
这样,当服务或控制器更新
currentData
时,其他服务或控制器也会更新

编辑: 应该说“更新指令实例中的控制器/服务”。因此,对
的更新不应更新
的数据。但是,对
数据的任何更改应仅更新
内所有控制器/服务的数据

问题

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

从第一个指令开始:

DataService.currentData='First Data'

然后,第二条指令更新了这一点:

DataService.currentData='seconddata'

突然之间,没有APICALL的集合的第一个指令
datatocollect就是“第二个数据”

我避免将数据放在$scope上,因为服务不能使用$scope,因此服务不再是唯一的真相来源

问题

  • 是否可以隔离每个指令的数据
  • 控制器/服务知道Angular中的每个指令是否有唯一标识符
  • 有人知道怎么解决这个问题吗
  • 我愿意使用的一个想法是为每个指令创建一个唯一的标识符,例如
    DataService.currentData['UniqueIdentifier']

    我也考虑过使用本地存储,但是我必须支持的浏览器并不都使用本地存储,我会遇到同样的问题,一个指令会覆盖另一个指令

    我愿意彻底地重新思考我要做的事情。我只想要一个所有控制器/服务都可以从中提取数据的SSoT


    *我用
    services
    来表示服务或工厂。

    您的目标是“当一个服务或控制器更新它为其他服务或控制器更新的当前数据时”。但是,在下一段中,您将其描述为一个问题。我很困惑。@zeroflagL我编辑了这个问题。你是对的,我不太清楚我在进球中的意思。当你认为其他人可以读懂你的想法时,就会发生这种情况:)你的目标是“当一个服务或控制器更新它也为其他人更新的当前数据时”。但是,在下一段中,您将其描述为一个问题。我很困惑。@zeroflagL我编辑了这个问题。你是对的,我不太清楚我在进球中的意思。当你认为别人能读懂你的心思时,就会发生这种情况:)