首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于Componnet的角单点服务

基于Componnet的角单点服务
EN

Stack Overflow用户
提问于 2020-05-21 21:18:13
回答 1查看 97关注 0票数 0

这更多的是一个结构性问题,而不是与bug相关的问题。我正在按照广泛使用的核心、共享和功能模块结构(如one 这里 )编写一个角度应用程序。我也在核心模块中定义了一个单例通知服务,但我使用以下自定义组件来自定义通知:

代码语言:javascript
复制
this.snackBar.openFromComponent(
      SnackbarComponent,
      configuration
    );

和SnackbarComponent

代码语言:javascript
复制
@Component({
  selector: "snackbar",
  templateUrl: "./snackbar.component.html",
  styleUrls: ["./snackbar.component.scss"]
})
export class SnackbarComponent {
  constructor(@Inject(MAT_SNACK_BAR_DATA) public data: any) {}
}

我感到困惑的是,应该把这个组件的声明放在哪里。

  1. 如果我将声明放在核心模块中,它将无法对我的功能模块进行访问(功能模块不导入核心模块,核心只导入一次,这在应用程序的根模块中)。
  2. 如果我将声明放在共享模块中,那么我的核心模块就必须导入我的共享模块才能访问这个组件,这与核心模块的概念(不应该导入共享模块)是背道而驰的。
  3. 显然,将我的服务放在共享模块中也不是一个好主意,因为它是一个单例,而且我还在其他核心服务(例如错误拦截器)中使用该服务。

注意,这只是一个例子,来说明这个问题。我还有其他一些类似的情况,核心服务依赖于组件(对话框服务、语言服务)。

任何解决这个问题的架构建议都是值得赞赏的。

很抱歉有这么长的问题。

EN

回答 1

Stack Overflow用户

发布于 2020-05-22 00:52:51

经过几个小时的思考,我想出了一个解决方案,就是将组件作为参数传递给服务:

代码语言:javascript
复制
open(component: SnackbarComponent) {
    this.snackBar.openFromComponent(
      component,
      configuration
    );
}

不会因为有人比我有更好的解决办法而结束这个问题。

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

https://stackoverflow.com/questions/61944002

复制
相关文章

相似问题

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