我创建了自己的Observable服务
import { Injectable, EventEmitter, Output} from '@angular/core';
@Injectable()
export class ObservableService {
data = [];
@Output eventEmitter:EventEmitter = 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(data);
})
}
目前正在编译时说
app/services/data-observable.service.ts(6,5): error TS1240: Unable to resolve signature of property decorator when called as an expression.
Supplied parameters do not match any signature of call target.
这是指这个特定的字符串,
@Output eventEmitter:EventEmitter = new EventEmitter();
但服务工作完美,任何建议有什么不对?
答案 0 :(得分:5)
Output()
之后您缺少括号。虽然服务中不需要Output()
。这仅在组件或指令中是必需的,因为您可以在模板中使用(eventEmitter)="onEventEmit($event)"
表示法。
另一方面,您缺少通用EventEmitter<T>
的类型注释:
eventEmitter: EventEmitter<any> = new EventEmitter();
或
eventEmitter: EventEmitter<boolean> = new EventEmitter<boolean>();
除此之外,EventEmitters
只应在@Component
内使用。如果您需要类似功能,请使用Subject
中的rxjs
。
subject: Subject<boolean> = new Subject<boolean>();