Angular v4:我们是将数据存储在服务或组件中还是两者都存储?

Spe*_*ros 22 javascript angular-services angular

Angular v4:我们是将数据存储在服务或组件中还是两者都存储?

在阅读了不少教程之后,以及阅读Angular的文档,我仍然不清楚这个主题.

https://angular.io/tutorial/toh-pt2 Angular的教程清楚地显示了存储在Component中的数据.

https://angular.io/guide/architecture#services Angular的架构>服务部分显示了具有数据数组的服务的代码(这是正确的吗?).

如果我们将数据存储在Components中,我们会大量使用@Input和@Output在子组件之间移动数据(假设我们希望这些数据在前端),但是当我们使用路由时会出现问题,我们需要新的组件从路由器插座加载,以便对我们的服务进行新的调用,以便向我们的服务器进行API调用以保存数据.可能在这种情况下,我们将有2个组件保存相同的数据 - 但它们可能不匹配.

如果我们将数据存储在服务中,我们会大量使用我们的服务来检索数据和操作数据(假设我们希望这些数据在前端),这样我们的服务就可以保存1组数据,并且每个组件都可以调用服务数据随时获取一致的数据.

-

存储数据的正确方法是什么?是其中一个没有建议吗?

Ale*_*son 11

一般来说,如果许多组件使用相同的数据,您希望将数据存储在服务中.这样,它可以非常轻松地从应用的所有不同部分访问相同的数据.如果一个组件修改了服务中的数据,则将对使用该数据的所有组件进行修改,这通常非常有用.但是,如果您只需要将数据从一个组件发送到另一个组件(其中一个是另一个组件的父组件),则有时不需要这样做.在这种情况下,建议使用输入/输出.

如果您不需要在各个组件之间发送特定数据,那么将数据存储在组件中是完全可以接受的!请记住,除非您使用输入/输出,否则无法从其他组件访问它.

  • “如果不需要在各个组件之间发送特定的数据,那么将数据存储在一个组件中是完全可以接受的!” 不是根据官方风格指南。 (2认同)
  • Angular 架构的官方指南指出“您在类中定义组件的应用程序逻辑——它为支持视图做了什么。该类通过属性和方法的 API 与视图交互。这意味着控制器在那里操作组件中的 UI,它应该只通过服务或输入知道其数据。 (2认同)

Bar*_*uch 10

组件控制器应仅管理该特定组件的UI交互.

另一方面,服务管理组件之间的交互,数据映射,没有直接关系的组件之间的事件处理(父>子,兄弟等).

这背后的想法是创建一个服务,它保留在范围内并且不会被破坏.另一方面,组件在被销毁后从DOM中删除.有了这个说法,如果您使用您的组件来执行,例如,API调用来收集数据,那么每次在框架的生命周期中初始化组件时都会执行此API调用,而如前所述,服务将保持不变.

服务的持久性还允许我们使用像observable这样的东西来始终保持前端和后端之间的直线.

希望这会有所帮助.

编辑

请记住,Angular.io教程分为多个部分,以帮助在用户遵循教程时对框架进行完整的介绍.


Ada*_*ine 5

如果多个组件共享数据,请尽可能将其放入服务中。我说在可能的情况下,因为通过让服务管理数据,您现在必须担心陈旧的数据。我的 goto 数据存储位置在 Component 中,但是您必须小心执行此操作,因为您不想导致站点必须一直重新获取数据。

就个人而言,我的大多数组件都管理自己的数据,以避免陈旧数据问题。

如果您不担心这一点,您甚至可以使用缓存服务,而不是将数据存储在 ram 中,而是将其存储在 localstorage 或会话存储中,以确保站点不会因负载而变慢数据被放入计算机 Ram。

虽然我不是这方面的专家,但这只是我的意见。