我正在开发一个Angular应用程序,我在其中实现了使用服务向不同组件发送消息的功能 . 在开发模式下,一切都很好,但在生成构建时,服务不会发送消息 . 下面是我执行的步骤这个功能 .

首先,我创建了一个服务,我创建了一个可观察(主题)对象 . 每个组件都会订阅这个observable,服务将有一个用于发送消息的方法 .

@Injectable()
export class ComponentMessageService  {

    /** message subject */
    private messageSource = new Subject<MyMessage>();

    /** message observable */
    messageSource$ = this.messageSource.asObservable();

    /** broadcastMessage */
    broadcastMessage(message: MyMessage) {
        this.messageSource.next(message);
    }
}

接下来,我创建了一个组件,它将定义订阅服务的通用方法 . 每个组件都将扩展此类 .

export abstract class MessagingComponent{

    disposableObject:any;

    constructor(public componentMessageService:ComponentMessageService){
        this.disposableObject=componentMessageService.messageSource$.subscribe(message => {
                this.handleMessage(message);
        });
    }

    handleMessage(message: MyMessage){

    }

    unsubscribeMethod(){
        this.disposableObject.unsubscribe():
    }
}

最后一步是创建一个实际对象并覆盖handleMessage函数 . 当该组件捕获该消息时,我想更改一个变量以显示一个弹出窗口 .

export class InstructionsPopupComponent extends MessagingComponent{

    constructor(public componentMessageService:ComponentMessageService,
                private changeDetector : ChangeDetectorRef){
        super(componentMessageService);
    }

    handleMessage(message: MyMessage){
        if(message.messageType==MyMessageTypes.DISPLAY){
            this.display=true;
            this.changeDetector.detectChanges();
        }
    }

    ngOnDestroy(){
        this.changeDetector.detach();
        this.unsubscribeMethod();
    }
}

要发送消息,我导入服务,然后调用broadcastMessage . 我正在开发的应用程序是从Jhipster应用程序构建的 .