我正在寻找一个关于在多个服务中使用一个组件的良好实践。
我有一个侧导航菜单,其中有7-8项。单击它们应该打开一个组件来编辑一个简单的表单,并将更新的数据发送到对应于所选导航项的服务。
// 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按钮上使用哪个服务并不是最好的方法。
我在考虑
但这似乎只是重复的工作。
您是否介意解释一下您将如何处理这样的场景,或者指出一个我可能不熟悉的相关概念?
干杯。
发布于 2018-12-19 08:38:13
共同的行为导致共同的成分。
在角度上,您按组合而不是扩展编写代码:您实现了几个接口(OnInit、AfterViewInit、CanActivate等)。定义类的行为,而不是用其他类扩展类。
如果我有8条路线,它们做同样的事情,但调用不同的端点,我会:
如果这8条路线有一些不同的行为,我会
发布于 2018-12-19 08:43:43
我会让这两件事更加独立。侧导航项不需要知道任何ResponsesEditComponent服务。它可以有自己的服务,比如ActivatedRoute。在ActivatedRoute中,您可以处理导航菜单的状态。在该服务中,您可以订阅任何“突出显示此或那个”事件。服务可以通过注入ResponseEdit服务来发出这些事件。
而且ResponseEditComponent可能也只有一个包装器服务。这是很容易,几乎是微不足道的,测试。向组件发送一个给定的:type和:childUrl (请给它们提供更多描述性名称)。绘制适当的表单(也许您可以为不同的窗体拥有不同的子组件,从而进一步分离层)。根据给定类型加载表单数据(如果有的话)。当表单(或嵌套组件)发出更改(例如保存事件)时,使用simple (类型、childUrl、emittedData)调用服务。服务应该能够确定将保存重定向到哪个子服务。
所以是的,把路线分成8,也没那么糟,但另一种方法是简单地为不同的形式有不同的组件。很可能是这样,避免了一些重复,但是添加了状态管理组件的开销。
https://stackoverflow.com/questions/53847106
复制相似问题