Как получить данные, хранящиеся в качестве темы rxjs - PullRequest
0 голосов
/ 03 июня 2019

Я работаю над отображением информации о событии, на которое нажали Я сохранил все события в массиве.

Когда пользователь нажимает на событие, тогда передается его идентификатор, который проверяет внутри массива и передает результат в службу.

 showDetail(id){
     let obj = this.events;

        let newArr =  Object.values(obj);

        let result = newArr.filter(function(el)  {
            return el["id"] == id; 
        });

    this.articleService.sendMessage(result);
        let url = `/article/${id}`;
        this.router.navigate([url]);

    }

сервис

private detailSubject = new Subject<any>();
sendMessage(formData: any) {
        this.detailSubject.next({formData});
    }

    getMessage(): Observable<any> {
        return this.detailSubject.asObservable();
    }

Теперь в моей статье / id страницы. Я не могу получить этот переданный массив.

У меня следующий код

ngOnInit() {
    this.articleService.getMessage().subscribe(
        res => {
            this.loadArticleDetail(res["formData"]);
        },
        error => {
            console.log("Error loading data");
        }
    );
}

1 Ответ

1 голос
/ 03 июня 2019
this.articleService.sendMessage(result); // <-- Subject.next()
let url = `/article/${id}`;
this.router.navigate([url]); // <-- Subject.subscribe() after Subject.next(), so value already emitted

Вы уже добавили тег BehaviorSubject. Так что используйте это. Кроме того, getMessage(): Observable<any> { ничего не делает, кроме возвратов Observable. Чувствует себя лишним:

private detailSubject = new BehaviorSubject<any>(null);
message$ = this.detailSubject.asObservable();

sendMessage(formData: any) {
        this.detailSubject.next({formData});
    }

И

ngOnInit() {
    this.articleService.message$.subscribe(...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...