使用ngx-bootstrap模式获取非Singleton服务实例的问题

时间:2018-04-08 07:17:04

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

我是Angular的新手,似乎已经陷入了深水之中,似乎应该很简单。我在使用ngx-bootstrap模式对话框时遇到问题。我正在使用ModalContentComponent模式。

case when (recordExists(ns)) then 'found' else 'not found' end as IS_FOUND

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

export class ModalContentComponent implements OnInit {
 title: string;

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

 ngOnInit() {
   ...
 }

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

我使用以下命令打开此组件的模态:

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

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

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

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

为了让模态工作,我不得不将ModalContentComponent添加到app.module.ts entryComponents数组中。一旦我这样做了模态出现,一切似乎都有效。

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

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

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

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

我认为entryComponents包含会导致附加服务实例出现问题,但如果没有它,我就无法使用该模式。

欢迎任何指示。

1 个答案:

答案 0 :(得分:1)

我弄清楚问题是什么。原来有一个包装组件,它有一个服务的提供者声明。所以这是操作员错误。使用模态的服务方法可行。