2

我目前正在使用 Angular 2 开发一系列 CRUD 组件。到目前为止,我在网上找到的所有示例都有Http组件内部的服务。换句话说,创建资源的组件(让我们称之为ResourceCreate)包括使用Http类在远程服务器上创建资源的代码。类似地,显示所有资源列表的组件(让我们称之为ResourceList)包括使用Http该类从服务器获取资源列表的代码。

这很好用,除非您想使用ResourceList来呈现尚未位于服务器上但它们是在客户端临时生成的资源列表。另一个示例是使用ResourceCreatejust 来键入资源信息,但将其保存在本地而不是服务器上。在上述两种情况下,将Http服务放在组件中是多余的。

所以我对这些组件的想法如下:

  • 创建一个父组件并附加所有 CRUD 子组件(例如ResourceCreate,,ResourceList)。
  • 与其Http用于提交或接收数据,不如让父组件向 CRUD 子组件传递数据Input()s或监听事件。Output()例如,让父组件Http请求获取资源列表,然后将该列表传递给ResourcetList组件。另一个示例可能是让组件与资源描述一起ResourceCreate发出事件。submit该事件将被父组件捕获,然后父组件将其提交给服务器。

通过使用这种方法,CRUD 组件对资源存储一无所知。因此,如果我们的资源位于本地或文件中,我们唯一需要更改的是父组件,而不是 CRUD 组件本身。这使得 CRUD 组件更具可重用性。

我试图了解这种方法是否存在缺点。为什么我在互联网上找到的所有 CRUD 示例都没有使用这种方法,而是将Http服务嵌入到 CRUD 组件中?有任何想法吗?

提前致谢。

4

1 回答 1

0

根据angular.io

一个组件控制一块我们可以称之为视图的屏幕空间

这意味着理想情况下,我们应该创建具有与之关联的视图的组件。您的方法的缺点是您创建的组件将经历完整的组件生命周期,这在您的情况下将是一个开销,因为您没有任何与之关联的视图。

此外,如果不将元素放在视图中,您将无法创建架构。任何组件的通信部分都应该独立于视图。

更好的选择是创建一个包装存储机制(本地 http/)的服务并将其注入到 CRUD 组件中。这允许将 CRUD 组件与数据存储隔离。

于 2016-06-01T04:21:02.003 回答