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;
}
所以我有一个 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;
}