2016-12-23 4 views
1

Я создал свой собственный Наблюдаемые сервисAngular2: Прилагаемые параметры не соответствуют какой-либо подписи цели вызова

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

Согласно https://angular.io/docs/ts/latest/api/core/index/EventEmitter-class.html он должен быть '@output() EventEmitter: EventEmitter = новый EventEmitter() ' – ranakrunal9

ответ

3

Вам не хватает круглых скобок после 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>(); 
+0

Да, это работает, спасибо. –

Смежные вопросы

 Смежные вопросы