Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 为什么异步管道中的新数据不会导致数据重新加载?_Angular_Reactjs_Behaviorsubject - Fatal编程技术网

Angular 为什么异步管道中的新数据不会导致数据重新加载?

Angular 为什么异步管道中的新数据不会导致数据重新加载?,angular,reactjs,behaviorsubject,Angular,Reactjs,Behaviorsubject,我已经阅读了很多关于Angular/ReactJS的背景知识,并试图很好地理解生命周期挂钩以及它们是如何协同工作的,但是下面的场景仍然让我感到困惑 假设您有一个someService,在该服务中定义了一个称为someBehaviorSubject的行为主体。它在someService中定义为: public someBehaviorSubject= new BehaviorSubject<someInterface[]>([]); someInterface的定义如下: someA

我已经阅读了很多关于Angular/ReactJS的背景知识,并试图很好地理解生命周期挂钩以及它们是如何协同工作的,但是下面的场景仍然让我感到困惑

假设您有一个someService,在该服务中定义了一个称为someBehaviorSubject的行为主体。它在someService中定义为:

public someBehaviorSubject= new BehaviorSubject<someInterface[]>([]);
someInterface的定义如下:

someAPIcall(argument: string): void {
  this.http.get<someInterface[]>(argument).subscribe(this.someBehaviorSubject);
}
interface someInterface {
  data: string
}
假设有一个名为someParent的父组件和一个名为someChild的子组件。someParent有两个按钮可调用:

someService.someAPIcall("A");

分别。someChild在模板中具有以下内容:

<div*ngFor="let data of someService.someBehaviorSubject | async">
  {{data}}
</div>

{{data}}

在我的观察中,当您单击某个父对象中的按钮A或按钮B时,数据会正确呈现数据集A或B。但是,如果在第一组数据呈现后单击另一个按钮,则不会使用新数据集重新呈现数据。我希望异步管道直接订阅到BehaviorSubject时会发生这种情况。我不明白为什么不重新绘制数据?

为了更新
行为主体
值,您需要使用
next()
函数,该函数将新值推送到
行为主体

例如:

someAPIcall(argument: string): void {
  this.http.get<someInterface[]>(argument).subscribe(data => 
{
   this.someBehaviorSubject.next(data); 
});}
someAPIcall(参数:字符串):void{
this.http.get(参数).subscribe(数据=>
{
this.someBehaviorSubject.next(数据);
});}

<>关于RXJS主题的更多信息,请考虑检查./P>这是正确的!正如这里的文档中提到的:BehaviorSubject在本质上既是观察者又是可观察者。我不必用“可观察”来表达。我错过的那一块是下一个。出于某种原因,我认为这是隐含的,所以你不必显式地调用它。如果你更新答案,我会接受这个!非常感谢你的帮助!谢谢,我很高兴它成功了。。。我更新了我的答案。
someAPIcall(argument: string): void {
  this.http.get<someInterface[]>(argument).subscribe(data => 
{
   this.someBehaviorSubject.next(data); 
});}