首页 文章

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

提问于
浏览
17

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

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

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

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

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

If we store data in a Service ,我们会大量使用我们的服务来检索数据和操纵数据(假设我们希望这些数据在前端),这样我们的服务就可以保存1组数据,并且每个组件可以随时调用服务数据来获取一致的数据 .

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

4 回答

  • 7

    如果多个组件共享数据,请将其置于服务中......如果可能 . 我说尽可能,因为通过使服务管理数据,你现在不得不担心过时的数据 . 我的goto数据存储位置在Component中,但您必须小心这样做,因为您不希望导致站点必须始终重新获取数据 .

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

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

    我不是这方面的专家,但这只是我的意见 .

  • 3

    您知道@Output与EventEmitter权限相关,因此通过绑定到事件在组件之间共享数据 . 服务是您通常执行类似Http请求的地方 - 类似RESTFUL api . 它也可以是本地存储,网络连接,或者作为应用程序运行时存储状态的存储桶 . 组件通常与视图关联并使用shadow DOM

  • 1

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

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

  • 5

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

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

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

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

    希望这会有所帮助 .

    编辑

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

相关问题