Angular2:基于 EventEmitter 的服务调用过多

Angular2: EventEmitter based service too many calls

所以我有一个 EventEmitter 服务,我想使用它来在组件之间共享数据,这是代码

import { Injectable, EventEmitter } from '@angular/core';

@Injectable()
export class ObservableService {
    data = [];
    eventEmitter: EventEmitter<any> = new EventEmitter();

    setSharedData(key, value) {
        this.data[key] = value;
        this.eventEmitter.emit(this.data);
    }

    getSharedData() {
        return this.data;
    }
}

下面是我想如何使用它

 ngOnInit() {
        this._observable.eventEmitter.subscribe((data) => {
            console.log('working');
            this.filter.emit(data);
        })
    }

所以,除了一件事,一切都很完美 - 控制台日志显示 working 符号 13 次!

这种奇怪的行为从何而来?

EventEmitter 用于从指令或组件引发自定义事件。不建议在 service 内使用它,因为你已经使用了它。

您应该在您的服务中使用 Observable,这样您就可以在您的 Component 中为它 subscribe

检查 Parent and children communicate via a service 了解如何使用 Observable

EventEmitter 不起作用。 我认为您应该将 @Output 与 EventEmitter 一起使用:

import { Injectable, EventEmitter, Output } from '@angular/core';

@Injectable()
@Component({
selector: 'sector'
})
export class ObservableService {
    data = [];
    @Output eventEmitter: EventEmitter<any> = new EventEmitter();

    setSharedData(key, value) {
        this.data[key] = value;
        this.eventEmitter.emit(this.data);
    }

    getSharedData() {
        return this.data;
    }
}

和HTML

   <sector (eventEmitter)="_eventEmitter" ></sector>

组件

 _eventEmitter: any;
 ngOnInit() {
        this.filter = this._eventEmitter;
    }