2017-09-22 63 views
0

我試圖讓我的後端API,返回一個對象數組的請求。我使用下面的代碼:Angular 2 |不能分配給數組,因爲它是一個常量或只讀屬性

small.component.ts (從auth.service.ts這使得GET請求我的後端API調用openDepositModal()調用的函數getUserInventory()時然後返回與對象的數組。)

[...] 

export class Item{ 
    id: String; 
    name: String; 
    img: String; 
    value: String; 
} 

const items: Item[] = []; 

[...] 

openDepositModal(){ 
    if(!items){ 
     this.authService.getUserInventory().subscribe(data => { 
      items = data; <-- ERROR HERE 
     }); 
    } 
} 

auth.service.ts

[...] 

getUserInventory(){ 
    let headers = new Headers(); 
    this.loadToken(); 
    headers.append('Authorization', 'JWT ' + this.authToken); 
    headers.append('Content-Type', 'application/json'); 
    return this.http.get('http://localhost:3000/api/user/inventory', { headers: headers }) 
    .map(res => res.json()); 
} 

[...] 

裏面的small.component.ts我試圖將我從服務中獲得的數據插入到「items」數組中。但是我得到錯誤「不能分配給數組,因爲它是一個常量或只讀屬性」。有人可以修復我的代碼?謝謝。 :-)

回答

0

更換錯誤,因爲你已經宣佈它作爲一個常量。聲明它在你的類中的屬性,然後你可以將值分配給它

export class SmallComponent{ 
private items: Item[] = []; 

[...] 

openDepositModal(){ 
    if(!items){ 
     this.authService.getUserInventory().subscribe(data => { 
      this.items = data; <-- HERE 
     }); 
    } 
} 

如果他們是組件類之外,那麼改變constlet

+0

完美,它的工作原理:)謝謝。 – DerJP

0

通過this.items = data;

+0

不起作用,因爲items數組超出組件類 – DerJP

0

使用let代替const

例如let items: Item[] = [];

const聲明就像let聲明,但是,正如其名稱所暗示的,它們的值在綁定後無法更改。換句話說,他們與let有相同的範圍規則,但是你不能重新分配給他們。

let vs. const (docs)

既然我們有兩種類型相似的作用域 語義聲明的,很自然的會發現自己要求要使用哪一個。 像大多數廣泛的問題一樣,答案是:這取決於。

應用最小權限原則,除了您打算修改的那些以外的所有聲明都應該使用const。理由是,如果一個 變量不需要寫入,其他工作在同一個 代碼庫的應該不會自動寫入該對象,並且 需要考慮是否真的需要重新分配給該對象 變量。在推理關於數據流的 時,使用const還可以使代碼更具可預測性。

另一方面,讓我們不再寫出比var,而且許多用戶會更喜歡它的簡潔性。本手冊的大部分內容均以 爲準。

相關問題