为组件的多个实例提供提供程序的单个实例

时间:2016-12-05 20:17:02

标签: angular angular2-forms

我正在使用以下代码动态创建组件

  addPhone(): void {
    const widgetFactory = this._resolver.resolveComponentFactory( PhoneComponent );
    this.createdWidgetRef =
        this.container.createComponent( widgetFactory );
    this.createdWidgetRef.instance.index = this.container.length - 1;
    this.createdWidgetRef.instance.containerRef = this.container;
    ++this.containerIndex
  }

组件创建正常。

我有一个ObservableMap,我希望只有一个实例可用于动态创建的PhoneComponent的所有实例。我不能将这个ObservableMap放在PhoneComponent中,因为将为每个PhoneComponent实例创建一个新的map实例(至少现在是这样)。将ObservableMap作为服务注入时会发生这种情况。

有没有办法使用angular2服务来完成这项任务?

注意:输入PhoneComponent的不同实例的所有数据都应该插入到ObservableMap的单个实例中 - 因此组件的多个实例只能存在一个实例。

此外,我不能在bootstrap中使用提供程序,因为我还需要将ObservableMap用于其他组件(例如EmailComponent)。

1 个答案:

答案 0 :(得分:0)

NgModule中提供非延迟加载的服务

@Injectable() 
export class SharedMapService {
  private _sharedMap = {};
  get sharedMap() { return this._sharedMap; }
}

@NgModule({
  imports: [...],
  declarations: [...],
  providers: [SharedMapService],
})
export class AppModule {}

将此构造函数添加到PhoneComponent

constructor(private sharedMap:SharedMapService) {
  console.log(sharedMap.sharedMap);
}