【问题标题】:How to get data stored as subject rxjs如何获取存储为主题 rxjs 的数据
【发布时间】:2019-06-03 10:37:54
【问题描述】:

我正在显示点击事件的详细信息。我已将所有事件存储在一个数组中。

当用户点击事件时,它的 id 被传递,它检查数组内部并将结果传递给服务。

 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");
        }
    );
}

【问题讨论】:

    标签: rxjs angular6 behaviorsubject


    【解决方案1】:
    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&lt;any&gt; { 除了返回 Observable 之外什么都不做。感觉多余:

    private detailSubject = new BehaviorSubject<any>(null);
    message$ = this.detailSubject.asObservable();
    
    sendMessage(formData: any) {
            this.detailSubject.next({formData});
        }
    

    ngOnInit() {
        this.articleService.message$.subscribe(...
    

    【讨论】:

      猜你喜欢
      • 2020-11-13
      • 2013-05-11
      • 1970-01-01
      • 2016-11-14
      • 2019-03-20
      • 1970-01-01
      • 2017-09-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多