【问题标题】:Issue with ngx-bootstrap modal getting non Singleton service instancengx-bootstrap 模式获取非单例服务实例的问题
【发布时间】:2023-03-20 08:39:02
【问题描述】:

我是 Angular 的新手,似乎已经深入了解一些看起来应该很简单的事情。我在使用 ngx-bootstrap 模式对话框时遇到问题。我正在使用 ModalContentComponent 模式。

export class ModalContentComponent implements OnInit {
 title: string;

 constructor(public bsModalRef: BsModalRef, private myService: MyService) {}

 ngOnInit() {
   ...
 }

 onSubmit(form: NgForm){
   ...
   this.myService.sort();
   this.bsModalRef.hide();
 }

我有一个组件,它打开注入我的服务和 BSModalService 之一的模式,如下所示:

constructor(private myService: MyService, public modalService: BsModalService ) {}

我使用以下内容从此组件打开模式:

openModalWithComponent() {
  const initialState = {  
    title: 'Preferences';
    ...
  };

  this.bsModalRef = this.modalService.show(ModalContentComponent,{initialState}); 
}

我导入 ModalContentComponent 并将其添加到我的 app.module.ts 中的声明数组中。我也将我的服务仅在此级别标识为提供者。

import { ModalContentComponent } from '.my.component';
import { MyComponent } from '.my.component';
import { MyService } from '.my.service';

declarations: [
  MyComponent,
  ModalContentComponent,
],
providers: [MyService],

为了让模式正常工作,我必须将 ModalContentComponent 添加到 app.module.ts entryComponents 数组中。一旦我这样做了,模式就会出现,一切似乎都正常。

entryComponents: [
  ModalContentComponent
]

但是,myService 服务并未被视为单例。 ModalContentComponent 正在获取自己的 MyService 服务实例。

如何让 ModalContentComponent 使用 myService 的单个共享实例?

我认为 entryComponents 包含导致附加服务实例出现问题,但没有它我无法让模式工作。

欢迎指点。

【问题讨论】:

  • 我不明白你的评论。我不认为我将服务添加到任何组件的提供者。它仅作为提供程序添加到 app.module.ts 提供程序中。然后通过构造函数将其注入组件中。除模态外,在每个组件中都表现出色。我是否遗漏了有关您的评论的内容?
  • 对不起,我误读了你的意思。请忽略我之前的评论。
  • NP。感谢观看
  • 我无法弄清楚如何停止为模式创建的额外服务实例。根据我发现的有关延迟加载组件的信息,我尝试重组事物并使用 forRoot ,但这也没有解决它。使用该服务的全部目的只是从模态中获取数据,所以我改变了方法,并使用了一个可以正常工作的 observable on close。我仍然非常想知道为什么会发生这种情况以及解决方案是什么。

标签: angular angular-services angular-components ngx-bootstrap-modal


【解决方案1】:

我发现了问题所在。原来有一个包装组件,它有一个服务提供者声明。所以这是操作员错误。具有模态的服务方法会奏效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-31
    • 1970-01-01
    • 2016-02-09
    • 2018-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多