Angular组件使用来自不同模块的多种服务

时间:2018-06-26 06:50:47

标签: angular service components

对于以下问题(如果有问题),我很难找到一个好的解决方案。

例如,我有一个具有不同模块的应用程序,比如所有者,位置和汽车。

现在,我正在构建一个可以搜索汽车的“搜索”组件。搜索汽车的逻辑在汽车模块的car.service中。

但是,当找到一辆汽车时,我还必须设置一个位置,以便位置模块中的location.service也可以在搜索组件中用于根据给定的ID查找位置。

所以现在我有了一个搜索组件,它需要location.service和car.service。

这感觉有点不好吗?有没有针对此类问题的解决方案。还是对Angular组件和服务来说这很常见?

2 个答案:

答案 0 :(得分:1)

您的组件应该能够处理视图的逻辑。这意味着他们应该处理按钮的单击,表单等。

具有业务逻辑时,应使用服务。对于您而言,您做得不错,为数据模型的每个“类”创建了3个服务。

现在,您错过的是您的组件中不需要2个依赖项:您只需要一个。

您已经构建了汽车的搜索组件→您需要对汽车服务的依赖性。就这样。

您要做的是调用服务,搜索您的汽车,然后在服务中,设置位置(这意味着您的汽车服务依赖于位置)。

其背后的逻辑很简单:假设明天,您还想通知卖方有人正在寻找他们的汽车。你会怎么做 ?您会在组件中添加第三个依赖项吗?

不。您要做的是使组件保持原样,并为您的服务添加依赖项。

现在,第二天,您决定从Firebase切换到Parse,因为它是免费的。您的情况如何?您必须更改组件依赖性吗?

就我而言,您的组件保持不变。只有您的汽车服务会将其依赖关系从firebase更改为parse。因为该组件不关心您使用的是哪个提供程序,所以它只想搜索汽车。

这种处理方式使您可以创建可在同一应用程序或其他应用程序中重用的组件和服务。

答案 1 :(得分:0)

我也是Angular的新手。我认为从其他模块导入服务是正常的。但是,在我的项目中,我创建了一个文件夹名称_services,用于存储项目的所有服务。接下来,我创建一个文件名index.ts

export * from './authencation.service';
export * from './alert.service';
export * from './notebook.service';

当我需要导入服务时,我致电import { StatisticSerivce, AlertService, UserService } from '../../../_services/index';