ExceptionManagerConfig

ExceptionManagerConfig

我想用angular2 eventemitter创建通用吐司服务。
我创建了一个服务并发出一些数据。我想在组件中捕获此数据,但它不起作用:/
必须发出事件的服务:

 import {EventEmitter, Injectable, Output} from "@angular/core";
 import {IAlert} from "../../types/interfaces/IAlerts";

@Injectable()
export class ExceptionsManagerConfig {
public getalert(): IAlert {
    return this._alert;
}

public setAlert(value: IAlert) {
    this._alert = value;
    this.alertChangeEvent.emit(value);
    console.log("set alert");
}

@Output() alertChangeEvent: EventEmitter<any> = new EventEmitter();
private _alert: IAlert;
}

这是一个必须捕获事件的组件:
import {Component, OnDestroy, OnInit, Input, EventEmitter} from "@angular/core";
import {ExceptionsManagerConfig} from "../../../../sheard/settings/exeptions/exeptions.menager.service.config";
import {IAlert} from "../../../../sheard/types/interfaces/IAlerts";
declare const Materialize: any;

@Component({
    providers: [ExceptionsManagerConfig],
    selector: "toast-alert",
    templateUrl: "app/elements/components/construction/toast-alert/toast-alert.html",
})
export class ToastComponent implements OnInit, OnDestroy {
    ngOnInit(): void {
        this.exceptionsManagerConfig.alertChangeEvent.subscribe(alert => this.showToast(alert));
        console.log("toast");
    }

    ngOnDestroy(): void {
    }

    showToast = (alert: IAlert) => {
        console.log(alert.message);
    };

    constructor(private exceptionsManagerConfig: ExceptionsManagerConfig) {

        this.exceptionsManagerConfig.alertChangeEvent.subscribe(alert => this.showToast(alert));
    }
}

我已经在主引导文件中设置了服务。
也许你有一些建议给我如何解决我的问题?

最佳答案

EventEmitter不应用于服务中。改用ObservableSubject@Output()在服务中是没有意义的。@Output()仅在指令和组件中支持。
你的代码应该做你所期望的。
我认为当前的问题是,在多个地方提供ExceptionsManagerConfig,导致一个组件调用ExceptionManagerConfig.setAlert()不同的ExceptionManagerConfig实例,然后一个组件被注入到ToastComponent
你应该在ExceptionManagerConfig中提供NgModule(如果使用>=RC。5)或AppComponent以使相同的实例到处注入。

09-25 18:36