我的应用程序有一个主页,其中包含一个复杂的datatable组件。目前,主组件加载所有服务,然后将它们注入datatable中,这非常简单,但当我不得不加载一些数据时,比如行单击事件,情况就变得更加复杂了。
,我的问题是:如果页面加载服务,然后将数据注入组件中,那么会更好吗?或者组件本身应该担心它呢?我想从最好的练习开始,避免任何未来的陷阱。
发布于 2017-03-13 12:52:00
这是一个您必须根据场景为每个组件做出的决定,因为这完全取决于用例。
我认为您的组件应该只使用服务和请求数据。它不应该关心如何&从哪里检索数据,因为它可以通过服务来处理how & where部分。
把您的组件想象成智能的和愚蠢的组件。
智能(状态)组件使用服务来获取数据,并在其模板中使用该数据。
Dumb (无状态)组件将仅用于向用户表示,并希望通过输入绑定作为属性来获取数据。因此,这个组件总是需要父组件的数据。如果它使用绑定获取所有所需的数据,那么它将在应用程序中的任何地方工作。
组件的概念:
组件概念背后的思想是使应用程序的小部分可重用。因此,这是您需要做出的决定,以确定您希望您的组件具有多大的可重用性。
示例:我们有一个产品列表组件和产品细节组件.产品列表组件使用一个名为ProductService的服务来获取数据。
案例1:如果您的应用程序只需要有一个视图,产品详细信息将始终作为嵌套组件存在于产品列表组件中,则只需将该列表组件作为智能组件。
当选择产品项时,它使用名为product的输入属性将该项传递给产品详细信息组件。
在这种情况下,如果用户需要的所有信息在第一次调用中已经存在,则不需要进行另一次HTTP调用来获取产品细节。
如果说您只拥有选定产品的子集产品信息,那么请看下面的案例2。
案例2:如果您的应用程序可能需要在其他地方没有父列表的产品详细信息,那么允许这个产品细节组件直接使用服务。
因此,这将是一个独立的组件,不需要依赖任何其他组件。
该组件只需要一个产品id作为输入,它将使用服务来获取该产品id的产品详细信息。因此,该组件可以在应用程序中的任何位置使用,包括在产品列表组件中,您只需将所选产品的id传递给该组件。
我有个博客,它使用产品列表和产品细节组件,两者都使用一个服务来获取数据。
发布于 2017-03-13 13:00:00
这是整个“智能组件与表示组件”(或有状态组件与无状态组件)的讨论。角大学有一篇关于这个的博客文章如果你想读更多。
基本建议是限制与数据检索服务交互的组件的数量,并将尽可能多的组件从输入接收到数据,并将数据作为输出发送出去。这样做的组件被认为是无状态/表示/哑的,因为它的所有数据都来自它的输入。它就像编程语言中的纯函数--纯函数更容易推理,因为它没有副作用,其返回值完全取决于它的输入。
如果您的大部分组件被设置为表示/哑组件,那么它有望导致一个不那么复杂的系统进行推理。
https://stackoverflow.com/questions/42763642
复制相似问题