2016-03-14 2 views
3

Я пытаюсь реализовать решение, которое я нашел здесь, в Stack Overflow, но столкнувшись с трудностями. У меня есть служба и компонент, и что-то не так.Угловая 2 - Реализация общих служб

Ошибка: TypeError: Невозможно прочитать свойство 'next' of undefined Что может быть неправильным или отсутствующим? Нет ли чего-то большего? Также в моем окне терминала я получил эту ошибку, но на моей консоли браузера она не отражена: ошибка TS1005: '=>'.

import {Injectable} from 'angular2/core'; 
import {Observable} from 'rxjs/Observable'; 
import {Observer} from 'rxjs/Observer'; 
@Injectable() 
export class GlobalService { 
data: any; 
dataChange: Observable<any>; 
constructor() { 
this.dataChange = new Observable((observer:Observer) { // this is the TS1005 error. 
    this.dataChangeObserver = observer; 
}); 
} 
setData(data:any) { 
this.data = data; 
this.dataChangeObserver.next(this.data); //Line of the critical error (next) 
} 
} 

и это компонент, который потребляют услуги .... (я размещу только соответствующие строки)

import {GlobalService} from "../../../global.service"; 
import(...) 
@Component({ 
    providers: [GlobalService], 
template: `<p>{{myData}}<>/p><span (click)="addTag(1, 'test')">Add more</span>` 
}); 
export class MyComponent { 
    addTag (id,desc){ 
     this._global.setData({ attr: 'some value' }); 
    } 
} 
constructor(private _global: GlobalService) { 

} 

Итак, что это неправильно и/или отсутствует, чтобы сделать этот простой компонент отображения результаты и добавить новые элементы и быть заметными? Раньше я никогда не применял наблюдаемые.

ответ

6

Ваш код не так ясен, и поэтому становится трудно понять. Все еще пытался помочь вам таким образом. Проверьте и дайте мне знать, если это не сработает.

... 
import {Injectable,EventEmitter,Output} from 'angular2/core'; 
@Injectable() 
export class GlobalService { 
data: any;  
@Output dataChangeObserver: EventEmitter=new EventEmitter(); 

    constructor() { 
    }); 

    setData(data:any) { 
    this.data = data; 
    this.dataChangeObserver.emit(this.data); 
    return this.dataChangeObserver; 
    } 
} 

export class MyComponent { 
    constructor(private _global: GlobalService) { 

    } 

    addTag (id,desc){ 
     this._global.setData({ attr: 'some value' }) 
       .subscribe((res)=>{this.myData=res}, 
       err=>console.log(err), //removed dot 
       ()=>console.log('recived data') //removed dot      
       ); 
    } 
} 
+0

Hi @micronyks! можете ли вы это подтвердить? dataChangeObserver: EventEmitter = new EventEmitter(); (Общий тип «EventEmitter » требует 1 аргумент типа .______ и this._global.setData ({attr: 'some value'}) .subscribe ((res) => {this.myData = res}, .err => console.log (err), .() => console.log ('recived data') ); -----> Свойство 'myData' не существует и выражение Argument ожидается на точках, которые соединяет err и() –

+0

его снова трудно читать! ;-( – micronyks

+0

Ой может быть '. (dot)' может быть проблемой. wait a min. Я обновляю ответ. – micronyks

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