2017-01-02 56 views
1

我對某些東西感到困惑,我認爲這是關於響應式編程的基礎,所以我在尋找一些解釋。Angular2綁定可觀察的功能,而不是屬性

爲什麼示例#1工作,但示例#2可怕地失敗了?

實施例#1:

元器件

export class AppComponent { 
    weeklyCount: Observable<number>[]; 

    constructor(private service: MyService) { 
    this.weeklyCount = [service.getCountByDay("12/18/2016"),service.getCountByDay("12/28/2016")]; 
    } 

模板

<ul> 
    <li class="text" *ngFor="let count of weeklyCount "> 
    {{ count | async }} 
    </li> 
</ul> 

實施例#2

元器件

export class AppComponent { 

    constructor(private service: MyService) { 
    } 

    thisWeeksCount(): Observable<number>[] { 
    var a = this.service.getCountByDay("12/18/2016"); 
    var b = this.service.getCountByDay("12/28/2016"); 
    return [a,b]; 
    } 

模板

<ul> 
    <li class="text" *ngFor="let count of thisWeeksCount()"> 
    {{ count | async }} 
    </li> 
</ul> 

我使用AngularFire2服務的覆蓋之下,但該服務返回rxjs觀測量。

編輯:「可怕的失敗」=頁面不返回結果,在死亡之前變爲無響應,並且記憶保持增長。這基於接受的答案是有意義的。

+0

以哪種方式失敗? –

回答

3

我不知道你的意思是「可怕的失敗」,但是這兩個是不一樣的:

  1. 創建與在您的模板後迭代2個觀測量的數組。

  2. 每次更改檢測需要檢查此表達式是否發生更改時,都會創建一個帶有Observables的新陣列。這意味着thisWeeksCount()方法將被非常頻繁地調用,從而創建大量的Observables,並且可能會向AngularFire2數據庫提出很多請求。

所以你可能要使用第一個選項。

+0

啊,所以這是因爲變化檢測正在觸發該方法。謝謝! –