首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在一个组件中使用多个服务的最佳实践

在一个组件中使用多个服务的最佳实践
EN

Stack Overflow用户
提问于 2018-12-19 08:18:30
回答 2查看 542关注 0票数 3

我正在寻找一个关于在多个服务中使用一个组件的良好实践。

我有一个侧导航菜单,其中有7-8项。单击它们应该打开一个组件来编辑一个简单的表单,并将更新的数据发送到对应于所选导航项的服务。

代码语言:javascript
运行
复制
// responses-routing..
const responsesRoutes: Routes = [
  {
    path: 'responses',
    component: ResponsesComponent,
    children: [
      {
        path: '',
        component: ResponsesHomeComponent
      },
      {
        path: ':type/:childUrl',                <----- here
        component: ResponsesEditComponent
      }
    ]
  }
];

我目前正在使用一个组件(ResponsesEditComponent)

1)从url获取"type“和"childUrl”字段(此url被导航到使用路由器和侧导航菜单。使用activatedRoute提取参数)

2)采取非常基本的用户输入。

3)拨打服务电话,发送接收到的输入。使用服务的决定取决于从参数.收到的"type“和"childUrl”字段。

7-8菜单项在某一时刻将有子项,这也将使用属于其父菜单项的服务。

如果我继续这样做,现行的制度可能会奏效,但我觉得应该有更好的办法来处理这一问题。向服务注入8个服务,并且必须决定在每个submit按钮上使用哪个服务并不是最好的方法。

我在考虑

  • 将一条路线分成8条
  • 使用8个组件而不是1个组件,每个组件对应于一个菜单项
  • 向每个组件注入一个相应的服务

但这似乎只是重复的工作。

您是否介意解释一下您将如何处理这样的场景,或者指出一个我可能不熟悉的相关概念?

干杯。

EN

回答 2

Stack Overflow用户

发布于 2018-12-19 08:38:13

共同的行为导致共同的成分。

在角度上,您按组合而不是扩展编写代码:您实现了几个接口(OnInit、AfterViewInit、CanActivate等)。定义类的行为,而不是用其他类扩展类。

如果我有8条路线,它们做同样的事情,但调用不同的端点,我会:

  • Make 1元件
  • 提供1次服务
  • 使用解析器覆盖每个路由的API

如果这8条路线有一些不同的行为,我会

  • 提供1次服务
  • Make 1元件
  • 使用组件工厂解析器创建行为略有不同的组件
票数 2
EN

Stack Overflow用户

发布于 2018-12-19 08:43:43

我会让这两件事更加独立。侧导航项不需要知道任何ResponsesEditComponent服务。它可以有自己的服务,比如ActivatedRoute。在ActivatedRoute中,您可以处理导航菜单的状态。在该服务中,您可以订阅任何“突出显示此或那个”事件。服务可以通过注入ResponseEdit服务来发出这些事件。

而且ResponseEditComponent可能也只有一个包装器服务。这是很容易,几乎是微不足道的,测试。向组件发送一个给定的:type和:childUrl (请给它们提供更多描述性名称)。绘制适当的表单(也许您可以为不同的窗体拥有不同的子组件,从而进一步分离层)。根据给定类型加载表单数据(如果有的话)。当表单(或嵌套组件)发出更改(例如保存事件)时,使用simple (类型、childUrl、emittedData)调用服务。服务应该能够确定将保存重定向到哪个子服务。

所以是的,把路线分成8,也没那么糟,但另一种方法是简单地为不同的形式有不同的组件。很可能是这样,避免了一些重复,但是添加了状态管理组件的开销。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53847106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档