Angular2:基于EventEmitter的服务太多了

时间:2016-12-23 09:38:43

标签: angular eventemitter

所以我有一个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次!

这种奇怪的行为来自哪里?

2 个答案:

答案 0 :(得分:1)

EventEmitter用于从指令或组件引发自定义事件。不建议您在service内使用它。

您应该在服务中使用Observable,以便subscribe内的Component可以使用Observable

检查Parent and children communicate via a service以了解如何使用{{1}}。

答案 1 :(得分:-2)

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>

成分<​​/ P>

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