所以我有一个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次!
这种奇怪的行为来自哪里?
答案 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;
}