Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.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-Child指令使用与父指令相同的数据。如何分享?_Javascript_Angularjs - Fatal编程技术网

Javascript AngularJS-Child指令使用与父指令相同的数据。如何分享?

Javascript AngularJS-Child指令使用与父指令相同的数据。如何分享?,javascript,angularjs,Javascript,Angularjs,我有一个child指令,它需要与使用它的某些父页面相同的数据 共享数据的最佳方式是什么 child指令是否应该与父指令进行相同的API调用 或者父级是否应该通过属性向指令发送数据 我想你描述了正确的解决方案。最好将数据传递给指令槽属性,并使指令仅显示该属性。 但是,如果您仍然希望在指令中调用api,那么我建议提取对服务的api调用,并在服务中缓存承诺。这可能很有用 我想这要看情况而定 如果父指令和子指令要单独重复使用(意味着可以使用其中一个而不使用另一个),那么您肯定希望使用attributes

我有一个child指令,它需要与使用它的某些父页面相同的数据

共享数据的最佳方式是什么

child指令是否应该与父指令进行相同的API调用


或者父级是否应该通过属性向指令发送数据

我想你描述了正确的解决方案。最好将数据传递给指令槽属性,并使指令仅显示该属性。
但是,如果您仍然希望在指令中调用api,那么我建议提取对服务的api调用,并在服务中缓存承诺。这可能很有用

我想这要看情况而定

如果父指令和子指令要单独重复使用(意味着可以使用其中一个而不使用另一个),那么您肯定希望使用attributes API将数据传递到子指令中

如果它们总是一起使用,则可以执行以下操作之一:

  • 使用属性传递值
  • 从子作用域中删除隔离作用域,让子作用域继承父作用域中的值。我讨厌人们这样做,但对每个人都是这样
  • 有一个缓存值的服务,它们都调用该服务并返回相同的值
  • 您可以让父作用域使用作用域事件系统将数据广播到它的子作用域
所有这些都将起作用。您需要与您的团队讨论他们最喜欢什么,以及您认为应该采用什么作为您的常规模式。在那之后,你就开始执行了


祝你好运

谢谢@Evgeniy。我的API调用当前通过服务执行。然而,这仍然意味着我要调用API两次。我将查看插件,看看它是否有帮助,但是我很好奇是否有一种纯粹的角度方法来实现这一点。我觉得这是一个常见的问题,谢谢!我对方法(3)非常感兴趣,即服务缓存值以便父级和子级都可以使用。事实上,我也发布了一个类似的问题。这是如何实现的?我是否只是从服务中声明变量供调用方使用?这会违背任何避免在服务中存储数据的狭隘规则吗@如果数据量很大,则可能会造成内存泄漏。因此,在调用服务以获取代码的代码中,可能需要在('$destroy',fn)侦听器上添加$scope.$,在destroy函数中,可以调用服务并从服务中删除数据。我建议不要直接返回数据。始终返回使用数据解决的承诺。这是你应该遵循的模式。还有其他问题吗?还有,看看$cacheFactory。它将帮助您使用过期的缓存等。如果您使用的是angular 1.4,那么只需执行以下操作:if(self.userName)返回$q.resolve(self.userName);这将允许您始终对承诺的api进行编码,而不是有时返回数据,有时返回承诺。你知道吗?太棒了!感谢您的解释和代码示例,这对我来说更清楚了。我将尝试一下,并向@aaronfrost汇报