2016-02-03 53 views
1

我正在構建非常簡單的Angular2,通過使用「firebase-angular2」npm模塊與Firebase進行對話。我設法將其發佈到Firebase,沒有任何問題。Angular2 firebase檢索並分配變量

問題:

  1. 我不能讓「項目」從「itemsarr」得值,我得到錯誤:遺漏的類型錯誤:無法設置屬性「項」的定義。我嘗試直接設置:this.items.push(records.val());,但我得到相同的錯誤。
  2. 在第14行我看到數組中的所有項目,但每次更新時都會在控制檯數組中列出,所以如果我有50個項目,它將在控制檯中列出50次。我知道我應該把它移到外面,但看問題3.
  3. 在第16行,我沒有看到itemsarr中的任何東西,它是空的?!

代碼:

1 var itemsarr = []; 
2 @Component({ 
    template:` 
     <li *ngFor="#item of items"> 
      {{item.title}} 
     </li> 
    ` 
    }) 
3 export class AppComponent { 
4 
5 items:Array<string>; 
6 
7 constructor() { 
8  
9 
10  myFirebaseRef.on('child_added', function(childSnapshot, prevChildKey) { 
11   childSnapshot.forEach(function(records) { 
12    this.items = itemsarr.push(records.val()); 
13   }); 
14   console.log(itemsarr) 
15  }); 
16  console.log(itemsarr) 
17  } 
18 } 
19 } 

SOLUTION(感謝亨利)

我需要設置 「= []」 的項目,然後再變換到箭頭函數,然後所有沒有問題的工作。不知道箭頭功能,這是以這種方式連接。

1 
2 @Component({ 
    template:` 
     <li *ngFor="#item of items"> 
      {{item.title}} 
     </li> 
    ` 
    }) 
3 export class AppComponent { 
4 
5 items:Array<string>=[]; 
6 
7 constructor() { 
8  
9 
10  myFirebaseRef.on('child_added', (childSnapshot, prevChildKey) => { 
11   childSnapshot.forEach((records) => { 
12    this.items.push(records.val()); 
13   }); 
14  
15  }); 
16 
17  } 
18 } 
19 } 

回答

1

你應該使用箭頭功能,能夠使用對應於組件本身的this關鍵字。

export class AppComponent { 
    items:Array<string>; 

    constructor() { 
    myFirebaseRef.on('child_added', (childSnapshot, prevChildKey) => { 
     childSnapshot.forEach((records) => { 
     this.items = itemsarr.push(records.val()); 
     }); 
     console.log(itemsarr) 
    }); 
    console.log(itemsarr); 
    } 
} 

請參閱此鏈接有關的箭頭功能的詞彙這更提示:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions

希望它可以幫助你, 蒂埃裏

0

使用

childSnapshot, prevChildKey = { ... } 

records => { ... } 

,而不是

function(childSnapshot, prevChildKey) { ... } 

function(records) { ... }