2017-10-30 14 views
0

私は配列を使ってオブザーバブルを作成しています。 subscribeメソッドを呼び出すと、その長さは倍になります。Angualr Rxjs観測可能なアイテム数はサブスクリプションで倍になる

ie。サブスクリプション後に配列に3つの項目がある場合、同じ項目を複製することによって6になります。

また、非同期パイプを使用してhtml内の項目を一覧表示しています。

plunker例をご確認ください

@Component({ 
selector: 'my-app', 
template: ` 
<div> 
    <ul> 
     <li *ngFor="let data of obs|async"> 
     {{data.name}} 
     </li> 
    </ul> 
</div> 
` 
}) 

export class App implements OnInit{ 

obs: Observable<any>; 

arr = [{ 
    name: 'name1', 
    age: 26 
    }, { 
    name: 'name2', 
    age: 27 
    }, { 
    name: 'name3', 
    age: 28 
    }]; 

    constructor() { 

    } 
    ngOnInit() { 

    this.obs = Observable.from(this.arr).toArray() 


    this.obs.subscribe(res => { 

    console.log(res) 
    }) 
    } 
} 

出力:

  • 名1
  • name2の
  • NAME3
  • 名1
  • 名2
  • JSFiddleで
  • NAME3

答えて

1

、これは私のために正常に動作している:https://jsfiddle.net/dcuLggwa/1/

使用している理由は、私はよく分からない:this.obs = Observable.from(this.arr).toArray()を? あなたは使用することができます:this.obs = Observable.of(this.arr)、同じ動作が発生した:https://jsfiddle.net/dcuLggwa/2/

私はObservable.ofの代わりObservable.from(...).toArray()を使用するようにplunkrを更新しましたし、それがうまく働いています:https://plnkr.co/edit/vaMK6G5AxCSs2kCIJ2h8?p=preview

Observable.from(...).toArray()Observable.ofの違いを:

Observable.fromは、配列からすべての項目をseperatlyに放出し、toArrayは観察可能なものが完了するまで待ってから、すべての項目を放出しますly)を配列として返します。基本的には、配列から始め、それを別々の項目に分割し、配列で再び結合します。

Observable.ofは、of()オペレータに渡される項目を放出するObservableを作成します。

+0

ありがとうございます。Observable.ofを使用して問題を解決しました。 –

関連する問題