Javascript 在两个组件之间共享数据,而不考虑父组件和子组件-angular2

Javascript 在两个组件之间共享数据,而不考虑父组件和子组件-angular2,javascript,angular,behaviorsubject,Javascript,Angular,Behaviorsubject,我一直在使用BehaviorSubject在组件之间共享数据。 比如说,相对url/文章属于ArticleComponent。然后是ArticlelistComponent中的/article/list,它包含一个包含文章详细信息列表的表。单击任何一行,我需要将该行详细信息传递给所有其他组件,这就是我的议程。 我面临的问题是,ngOnInit只在重新加载页面时起作用。最初,只有默认的{}会反映在articlecomponent中,这只是我为BehaviorSubject设置的默认结果。当我单击表

我一直在使用BehaviorSubject在组件之间共享数据。 比如说,相对url/文章属于ArticleComponent。然后是ArticlelistComponent中的/article/list,它包含一个包含文章详细信息列表的表。单击任何一行,我需要将该行详细信息传递给所有其他组件,这就是我的议程。 我面临的问题是,ngOnInit只在重新加载页面时起作用。最初,只有默认的{}会反映在articlecomponent中,这只是我为BehaviorSubject设置的默认结果。当我单击表中的一行时,该数据不会在ngOnInit中自动更新和订阅。旧值{}始终保留。我不确定将其放置在何处,以便立即反映更改。请帮忙解决。 我的代码如下:

articlelist.component.ts

getSpecificDetail(value){
        this.articleService.getArticleDetail(value);
   }
 ngOnInit(){
    this.articleService.currentdata.subscribe(data=>{
    this.data=data;
    console.log(this.data);
    })
   }
 ngOnInit(){
    this.patientService.getData().subscribe( data =>{
        this.data=data;
         console.log(this.data);
     })
 }
第条服务条款

 public articledata=new BehaviorSubject<Object>({});
    currentdata=this.articledata.asObservable();
  getArticleDetail(data){         //data comes from articlelist.component
          return this.articledata.next(data);
    }
  articledata=new BehaviorSubject<Object>({});

  getData() : Observable<Object> {
     return this.articleData.asObservable();
  }
  setData(data) : void { this.articleData.next(data); } 

编辑:我在

中扩展了我的观察,这取决于您对该数据所做的操作,另一种在绑定到该数据的组件之间共享数据的方法是利用Angular的更改检测,而不是使用您自己的
行为主题

import { Injectable } from '@angular/core';

@Injectable() 
export class DataService {
  serviceData: string; 
}
我在这里有一篇关于它的博文:

这里有一个plunker:

它应该是这样工作的(这就是我一直使用的观察对象和主题)。我总是试图确保我正在从主机服务触发并提供订阅,以便将关注点分开

文章成分

  getSpecificDetail(value){
       this.articleService.setData(value);
  }
第条服务条款

 public articledata=new BehaviorSubject<Object>({});
    currentdata=this.articledata.asObservable();
  getArticleDetail(data){         //data comes from articlelist.component
          return this.articledata.next(data);
    }
  articledata=new BehaviorSubject<Object>({});

  getData() : Observable<Object> {
     return this.articleData.asObservable();
  }
  setData(data) : void { this.articleData.next(data); } 

您使用行为主题的具体原因是什么?

如何更改有关更改的
articledata
数据?从getArticleDetail传递的数据在每次单击表中的任何一行时都会有所不同。流程如下,。单击一行,我将该数据从articlelist组件传递到此服务。好的。因此,这里的
return
语句是不必要的。如果没有它,该方法将被视为无效的,对吗?该方法的吸引力在于:您可以轻松地在不同实例之间共享值,这也是它的缺点。随着应用的发展,你开始有10多个实例访问甚至修改同一个“全局”值或对象,事情变得极不可预测。视图状态开始不可预测地“泄漏”。这就是UI开发的react模型如此流行的原因之一——它确保了分离。订阅者正在获得相同的数据,但他们所做的任何事情都不会影响源数据。这只会影响他们的新个人副本。这使调试变得容易多了。同意。这就是为什么它真的取决于你如何处理数据。如果您有简单的CRUD操作或简单的主控和详细布局,那么这是一个很好的简单选项。如你所说,如果你有10个组件更新值,那么可能需要更复杂的东西。但似乎
BehaviorSubject
也不是最好的答案;更像是ngrx/store。我想,我的问题是,ngOnInit只有在重新加载时才会加载。我面临的和以前一样。只有{}没有别的。而{}只是我在Behavior Subject中设置的默认值。我认为,了解如何在不刷新的情况下在Ngonit上加载数据将解决这个问题。问题不在于代码。我也在patientlist组件中将服务声明为提供者。那把事情搞得一团糟。现在是新的一期。