【发布时间】:2020-05-21 21:18:13
【问题描述】:
这更像是一个结构性问题,而不是与错误相关的问题。我正在编写一个 Angular 应用程序,遵循广泛使用的核心、共享和功能模块结构,例如 here。 我也在核心模块中定义了一个单例通知服务,除了我使用如下自定义组件来自定义我的通知:
this.snackBar.openFromComponent(
SnackbarComponent,
configuration
);
和 SnackbarComponent
@Component({
selector: "snackbar",
templateUrl: "./snackbar.component.html",
styleUrls: ["./snackbar.component.scss"]
})
export class SnackbarComponent {
constructor(@Inject(MAT_SNACK_BAR_DATA) public data: any) {}
}
我感到困惑的是在哪里放置这个组件的声明。
- 如果我将声明放在核心模块中,我的功能模块将无法访问它(功能模块不导入核心模块,核心只导入一次,并且在应用程序的根模块中)。李>
- 如果我将声明放在我的共享模块中,那么我的核心模块必须导入我的共享模块才能访问该组件,这与核心模块的概念相反(不应该导入共享模块)。
- 显然将我的服务放在共享模块中也不是一个好主意,因为它是一个单例,而且我在其他核心服务中使用此服务(例如错误拦截器)。
请注意,这只是一个示例,用于说明问题。我还有其他一些类似的情况,我的核心服务依赖于组件(对话服务、语言服务)
感谢任何处理此问题的架构建议。
抱歉问题太长了。
【问题讨论】:
-
我认为您必须将服务放在核心模块中,并使用providedIn root 使其成为单例。对于组件,我不明白为什么您需要在核心模块中使用它,我通常只将单例服务、拦截器、守卫放在核心模块中,没有组件
-
组件应该在哪里声明呢?在核心模块之外的任何地方,您都需要在核心模块中导入包含它的模块,以便服务访问它。
标签: angular