在多个boostrapped组件之间共享服务

时间:2016-02-24 16:42:21

标签: angular angular2-services

我创建了两个单独的boost包(在2个不同的视图中),我尝试在这两个组件之间共享一个独特的服务(单例)。该服务用于操纵这些组件之一。我的服务:

@Injectable()
export class ModalContainerService {
    private component: ModalContainer;

    constructor() {}

    setComponent(component: ModalContainer) {
        this.component = component; <-- for holding the reference to my component
    }

    showFirst() {
        this.component.showFirst();
    }

    addModal(modal: Type) {
        this.component.addModal(modal);
    }
}

第一部分:

export class ModalContainer {
    private modals: Array<ComponentRef> = [];

    constructor(
        private loader: DynamicComponentLoader,
        private element: ElementRef,
        private modalService: ModalContainerService) {
        modalService.setComponent(this); <-- where I set the component reference for my service
    }

    showFirst(): void {
        this.modals[0].instance.show();
    }

    addModal(modal: Type) {
        this.loader
            .loadIntoLocation(modal, this.element, 'modalContainer')
            .then((ref) => {
                this.modals.push(ref);
            });
    }
}

bootstrap(ModalContainer, [ModalContainerService]);

我的第二个组件,它是第一个组件的一部分:

export class TextboxAutocomplete {    
    constructor(private modelService: ModalContainerService) {}
}

但是ModalContainerService不再包含我的第一个组件的引用了... 是否有可能在两个组件之间共享数据/服务?

1 个答案:

答案 0 :(得分:4)

我没有获得您想要分享的服务,因此我使用FooService作为名称。

在Angular之外创建FooService的实例,然后将值作为提供者传递到booth bootstrap()

var fooService = new FooService();
bootstrap(AppComponent1, [provide(FooService, {useValue: fooService})]);
bootstrap(AppComponent2, [provide(FooService, {useValue: fooService})]);