Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.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 2.0.1异步管道不';不能与Rx主题一起工作_Angular_Rxjs_Angular2 Template_Behaviorsubject_Subject Observer - Fatal编程技术网

Angular 2.0.1异步管道不';不能与Rx主题一起工作

Angular 2.0.1异步管道不';不能与Rx主题一起工作,angular,rxjs,angular2-template,behaviorsubject,subject-observer,Angular,Rxjs,Angular2 Template,Behaviorsubject,Subject Observer,AsyncPipe适用于BehaviorSubject,但我不想用空数据初始化服务,因此我使用Subject intead 问题是NgFor和asyncPipe不适用于主题,这是一个问题吗 这项工作: 组成部分: export class AppComponent { foo = new BehaviorSubject<Array<number>>([1,2,3]); getFoo(){ return this.foo.asObservable();

AsyncPipe适用于BehaviorSubject,但我不想用空数据初始化服务,因此我使用Subject intead

问题是NgFor和asyncPipe不适用于主题,这是一个问题吗

这项工作:

组成部分:

export class AppComponent {
  foo = new BehaviorSubject<Array<number>>([1,2,3]);

  getFoo(){
     return this.foo.asObservable();
  }
}
导出类AppComponent{
foo=新行为主体([1,2,3]);
getFoo(){
返回此.foo.asObservable();
}
}
模板

<span *ngFor="let e of foo.asObservable() | async">{{e}}</span>
<span *ngFor="let e of foo.getFoo() | async">{{e}}</span>
{{e}
这不起作用:

组成部分

export class AppComponent {
  foo = new Subject<Array<number>>();

  constructor(){
     setTimeout(() => {
          this.foo.next([1,2,3]);
     }, 3000);
  }

  getFoo(){
     return this.foo.asObservable();
  }
}
导出类AppComponent{
foo=新主题();
构造函数(){
设置超时(()=>{
this.foo.next([1,2,3]);
}, 3000);
}
getFoo(){
返回此.foo.asObservable();
}
}
模板

<span *ngFor="let e of foo.asObservable() | async">{{e}}</span>
<span *ngFor="let e of foo.getFoo() | async">{{e}}</span>
{{e}

这里的问题是从我的模板中调用一个方法-这意味着每次运行更改检测时,我都调用您的getFoo()函数,该函数返回一个新的observable实例,重置异步管道

因此,无论您在NgFor中调用getFoo(),代码都会失败


解决方案,在组件中创建一个可观察的变量。

你能提供一个fiddle/plunk来复制这个问题吗?请参阅update@estusI我猜问题是
。asObservable()
,它不应该在那里。你没有在模板中的任何地方调用
getFoo()
。对不起,我创建的
getFoo()是错误的
但我忘了在视图中调用它。我现在就更新它。无论如何,同样的行为是因为我调用了
asObservable()
。谢谢。你能详细说明一下“在组件中创建一个可观察的变量”吗?我有一个类似于
private user:observable在我的组件中。但是这没用!你必须初始化可观察的还是什么?