簡體   English   中英

Angular Rxjs可觀察項目在訂閱時計數翻倍

[英]Angular Rxjs Observable items count doubles on subscribe

我正在使用數組創建一個可觀察對象。 當我調用訂閱方法時,其長度變為兩倍。

即。 如果數組在訂閱后有3個項目,則通過復制相同項目變成6個。

我還使用異步管道來列出html中的項目。

請檢查插栓示例

@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
  • NAME2
  • NAME3

在JSFiddle中,這對我來說很好用: https ://jsfiddle.net/dcuLggwa/1/

我不確定為什么要使用: this.obs = Observable.from(this.arr).toArray()嗎? 您可以使用: this.obs = Observable.of(this.arr) ,導致相同的行為: https : this.obs = Observable.of(this.arr)

我已經更新了plunkr以使用Observable.of而不是Observable.from(...).toArray() ,它的工作正常: https ://plnkr.co/edit/vaMK6G5AxCSs2kCIJ2h8?p=preview

Observable.from(...).toArray()Observable.of之間的區別:

Observable.from發射數組中的每個項目, toArray等待直到observable完成,然后將所有項目(分別發射)作為數組發射。 因此,從根本上講,您從一個數組開始,將其拆分為單獨的項目,然后再次將其組合成一個數組。

Observable.of創建一個Observable,它發出要傳遞給of()運算符的項目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM