Lun*_*man 2 compiler-errors observable typescript angular
我创建了自己的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;
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个用法示例
ngOnInit() {
this._observable.eventEmitter.subscribe((data) => {
console.log(data);
})
}
Run Code Online (Sandbox Code Playgroud)
所以目前正在编译它说
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.
Run Code Online (Sandbox Code Playgroud)
这是指这个特殊的字符串,
@Output eventEmitter:EventEmitter = new EventEmitter();
Run Code Online (Sandbox Code Playgroud)
但服务工作完美,任何建议有什么不对?
你错过了括号Output().虽然Output()在服务中没有必要.这仅在组件或指令中是必需的,因为您可以(eventEmitter)="onEventEmit($event)"在模板中使用表示法.
另一方面,您缺少泛型的类型注释EventEmitter<T>:
eventEmitter: EventEmitter<any> = new EventEmitter();
Run Code Online (Sandbox Code Playgroud)
要么
eventEmitter: EventEmitter<boolean> = new EventEmitter<boolean>();
Run Code Online (Sandbox Code Playgroud)
在上面,EventEmitters应该只在里面使用@Component.如果您想要类似的功能,请使用Subjectfrom rxjs.
subject: Subject<boolean> = new Subject<boolean>();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3122 次 |
| 最近记录: |