Angular v4:我们是将数据存储在服务或组件中还是两者都存储?
在阅读了不少教程之后,以及阅读Angular的文档后,我仍然不清楚这个主题。
https://angular.io/tutorial/toh-pt2 Angular的教程清楚地显示了存储在Component中的数据。
https://angular.io/guide/architecture#services Angular的架构>服务部分显示具有数据数组的服务的代码(这是正确的吗?)。
如果我们将数据存储在组件中,我们会大量使用@Input和@Output在子组件之间移动数据(假设我们希望这些数据在前端),但这会造成问题我们使用路由,我们需要从路由器插座加载的新组件,以便对我们的服务进行新的调用,以便对我们的服务器进行API调用以保存数据。可能在这种情况下,我们将有2个组件保存相同的数据 - 但它们可能不匹配。
如果我们将数据存储在服务中,我们会大量使用我们的服务来检索数据和操纵数据(假设我们希望这些数据在前端),这样我们的服务可以保存1套数据,每个组件可以随时调用服务数据以获得一致的数据。
-
存储数据的正确方法是什么? 是其中一个没有被告知?
答案 0 :(得分:10)
一般来说,如果许多组件使用相同的数据,您希望将数据存储在服务中。这样,它可以非常轻松地从应用的所有不同部分访问相同的数据。如果一个组件修改了服务中的数据,则将对使用该数据的所有组件进行修改,这通常非常有用。但是,如果您只需要将数据从一个组件发送到另一个组件(其中一个是另一个组件的父组件),则有时不需要这样做。在这种情况下,建议使用输入/输出。
如果您不需要在各个组件之间发送特定数据,那么将数据存储在组件中是完全可以接受的!请记住,除非您使用输入/输出,否则无法从其他组件访问它。
答案 1 :(得分:8)
组件控制器应仅管理该特定组件的UI交互。
另一方面,服务管理组件之间的交互,数据映射,没有直接关系的组件之间的事件处理(父级>子级,兄弟姐妹等)。
这背后的想法是创建一次服务它保留在范围内并且不会被破坏。另一方面,组件在被销毁后从DOM中删除。有了这个说法,如果您使用您的组件来执行,例如,API调用来收集数据,那么每次在框架的生命周期中初始化组件时都会执行此API调用,而如前所述,服务将保持不变。
服务的持久性还允许我们使用像observable这样的东西来始终保持前端和后端之间的直线。
希望这有帮助。
修改的
请记住,Angular.io教程分为多个部分,以帮助在用户遵循教程时对框架进行完整的介绍。
答案 2 :(得分:3)
如果多个组件共享数据,请尽可能将其放入服务中。我说尽可能,因为通过使服务管理数据,你现在不得不担心过时的数据。我的goto数据存储位置在Component中,但是你必须小心这样做,因为你不想让网站不得不一直重新获取数据。
就个人而言,我的大多数组件都会管理自己的数据,以避免陈旧数据问题。
如果您不担心这一点,您甚至可以使用缓存服务,而不是将数据存储在ram中,将其存储在localstorage或会话存储中,以确保网站不会减慢速度通过将大量数据放入计算机Ram中。
我不是这方面的专家,但这只是我的观点。
答案 3 :(得分:1)
您知道@Output与EventEmitter权限相关,因此通过绑定到事件来在组件之间共享数据。 服务是您通常执行类似Http请求的地方 - 类似于RESTFUL api。 它也可以是本地存储,网络连接,或者作为应用程序运行时存储状态的存储桶。 组件通常与视图关联并使用shadow DOM