有两个组件列表和模态:
他们没有亲子关系。
问题是当你点击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/