【问题标题】:Angular2: Supplied parameters do not match any signature of call targetAngular2:提供的参数与调用目标的任何签名都不匹配
【发布时间】:2017-05-08 21:44:23
【问题描述】:

我创建了自己的 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();

但是服务很完美,有什么建议吗?

【问题讨论】:

标签: angular typescript compiler-errors observable


【解决方案1】:

Output() 后面的括号不见了。尽管Output() 在服务中不是必需的。这仅在组件或指令中是必需的,因为您可以在模板中使用 (eventEmitter)="onEventEmit($event)" 表示法。

另一方面,您缺少通用 EventEmitter<T> 的类型注释:

eventEmitter: EventEmitter<any> = new EventEmitter();

eventEmitter: EventEmitter<boolean> = new EventEmitter<boolean>();

除此之外,EventEmitters 只能在 @Component 内部使用。如果您想要类似的功能,请使用rxjs 中的Subject

subject: Subject<boolean> = new Subject<boolean>();

【讨论】:

    猜你喜欢
    • 2017-08-24
    • 2017-11-14
    • 2016-12-07
    • 2018-01-08
    • 2016-11-27
    • 2016-06-09
    • 2017-11-18
    • 2023-03-15
    • 2017-04-28
    相关资源
    最近更新 更多