У меня есть сервис с помощью следующего кода:Как реализовать rxjs подписку в угловом 2?
import {Injectable} from 'angular2/core';
import {Observable} from 'rxjs/Observable';
import {Observer} from 'rxjs/Observer';
import 'rxjs/add/operator/share';
import {Article} from './article';
@Injectable()
export class ArticleService {
public articleSelected$: Observable<Article>;
private _observer: Observer<Article>;
constructor() {
this.articleSelected$ = new Observable(observer =>
this._observer = observer).share();
}
selectArticle(article:Article){
this._observer.next(article);
}}
и в моем компоненте:
export class seeArticle{
subscription: any;
constructor(private _articleService: ArticleService) {
}
ngOnInit() {
this.subscription = this._articleService.articleSelected$
.subscribe(article => this.onArticleSelected(article));
}
onArticleSelected(article){
console.log("an article was selected",article);
}
}
Когда я выбираю статью (нажав на него) в другом компоненте, функция selectArticle служба запускается на выполнение , проблем нет. Однако this._observer.next(article);
кажется, чтобы вызвать следующую ошибку:
"TypeError: Cannot read property 'next' of undefined"
Будучи очень новый угловой 2 и Rxjs, я не могу понять его
ТНХ для ответа. Ваш plnk работает, но по какой-то причине в моей реализации я получил «Property» next »не существует в типе« Observable », когда я пытался переключиться на EventEmitter. Будут изучать ваш plnk более внимательно и держать вас в курсе ... –
Manube
Я думаю, это TS жалуется? Убедитесь, что это 'public articleSelected $: EventEmitter;' not 'Observable' type. Я обновил демо. –
dfsq
Да, TS жалуется сейчас. Хорошо, сделал это, больше не жалуюсь, спасибо. Тем не менее в журнале не было опубликовано сообщение «статья была выбрана», хотя – Manube