有两个组件列表和模态:
他们没有亲子关系。
问题是当你点击new按钮,然后调用openModal()方法时,弹出窗口就会打开。
我设置了this.isOpenModal = true;
列出组件openmodal()逻辑部分:

public isOpenModal: boolean = false;

public openModal(id: string): void {
    if (!this.isOpenModal) {
    this.isOpenModal = true;
    const data = {id: id};
    this.modalModel.add(AudienceModel.ENTITY_NAME, data);
    }
}

在模态组件中,我有close()方法:
isModalOpen: boolean;

public close(index: number): void {
    this.isModalOpen = false;
    this.audienceModel.isModalOpened = this.isModalOpen;
    for (let i = 0; i < this.modalsArray.length; i++) {
        if (this.modalsArray[index].modalStyle.zIndex <= this.modalsArray[i].modalStyle.zIndex) {
            this.modalsArray[i].modalStyle.zIndex--;
        }
    }
    this.modalsArray.splice(index, 1);
}

执行close方法时,我需要将其设置为false:isopenmodal:boolean=false;
并在列表组件中提供该事件。
有什么解决办法吗?

最佳答案

您可以使用共享服务,如:
shared.service.ts
声明主题:

openModalSubject : Subject<boolean> = new Subject<boolean>() ;

setModalStatus(isOpenModal : boolean){
 openModalSubject.next(isOpenModal);
}

现在,在使用如下setter之后,您可以订阅组件中的主题:
this.sharedService.setModalStatus(isOpenModal);
设置后,主题将立即将isOpenModal发布到订阅它的组件。
在您的组件中,注入shared.service.ts,您可以订阅如下内容:
this.sharedService.openModalSubject.subscribe((openModal: boolean) => {
 //do whatever you want with the openModal
});

关于angular - 如何在 Angular 4中发射事件发射器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50273773/

10-11 11:40