Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 使用组件和服务创建模块_Angular_Typescript_Ionic3_Angular Components_Angular5 - Fatal编程技术网

Angular 使用组件和服务创建模块

Angular 使用组件和服务创建模块,angular,typescript,ionic3,angular-components,angular5,Angular,Typescript,Ionic3,Angular Components,Angular5,我目前正在开发一个离子3应用程序。在这种情况下,我需要一个手风琴组件,如的一个,但离子框架没有提供这样一个组件。所以我决定自己实施一个,这对我来说是一个继续学习Angular 5的好机会 为了澄清问题的上下文,您需要知道我的组件是通过以下文件树定义的: components/ my-accordion/ my-accordion.component.html my-accordion.component.css my-accordion.componen

我目前正在开发一个离子3应用程序。在这种情况下,我需要一个手风琴组件,如的一个,但离子框架没有提供这样一个组件。所以我决定自己实施一个,这对我来说是一个继续学习Angular 5的好机会

为了澄清问题的上下文,您需要知道我的组件是通过以下文件树定义的:

components/
   my-accordion/
      my-accordion.component.html
      my-accordion.component.css
      my-accordion.component.ts
      my-accordion.service.ts
实际上,我需要一个特定的服务来允许我的组件的所有实例之间的通信。因为当我打开手风琴的一个项目时,我希望另一个项目自动关闭,一次只打开一个项目。我不知道这是否是正确的方法,但它似乎与RxJS库配合得很好

无论如何,正如你所看到的,我的手风琴的定义取决于一个组件和一个服务。没有这项服务,我的手风琴就演奏不好。问题是,我想把它放在一个模块中,我可以与其他应用程序共享,以便能够重用我的手风琴

我的第一个想法是把它放在
SharedModule
中,但它明确地说:

SharedModule不应具有提供程序,原因如下 以前。也不应进口或再出口任何NGO模块 有供应商

读了之后,我的第二个想法是把我的手风琴放在
核心模块中,但医生再次明确地说:

考虑使CoreModule成为一个没有 声明


因此我的问题是:如果我想在其他离子/角度应用程序中重用组件和it服务(用于同级通信),应该将其放置在何处?

您不需要重新发明轮子。有一个爱奥尼亚
accordio
组件,您可以在其中与
爱奥尼亚3
应用程序一起使用

给你

Q:

如果需要,将组件和it服务(用于同级通信)放置在何处 我希望能够在其他离子/角度应用中重用它

A:


它有一个非常简单的答案,
Ionic
。您只需使用此
CLI
创建
提供程序
,即可生成提供程序MyAccordion
。就是这样。

谢谢你的链接。事实上,我只搜索了爱奥尼亚官方组件列表,没有任何
accordion
组件。但是回到我最初的问题,我应该把这样一个与服务一起工作的组件放在哪里进行兄弟通信呢?是否有任何准则来创建一个同时包含组件和服务的模块?请参阅更新。
provider
只是一种将服务作为单例注入的机制,不是吗?是的,是的。通常我们在
app.module.ts
文件中声明它。我认为在这种情况下,您不应该使用服务。只需在组件中使用javascript即可。实际上,我只需使用
@Input
注释,而不需要任何服务,就可以实现手风琴项目之间的通信。但根据我在Angular官方文档上读到的内容,正确的方法是创建
功能模块
,并使用静态方法定义模块及其导出的提供者,以避免模块延迟加载时出现任何问题。下面的文章很好地描述了如何实现这样的
功能模块