角2 |无法分配给数组,因为它是常量或只读属性

时间:2017-09-22 19:17:44

标签: javascript angular typescript

我试图向我的后端api发出get请求,返回一个对象数组。我使用以下代码:

small.component.ts (当调用openDepositModal()时,它从auth.service.ts调用函数 getUserInventory(),它向我的后端api发出get请求,然后返回一个带有对象的数组。)

[...]

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内部我试图将我从服务中获得的数据插入&#34; items&#34;阵列。但我收到错误&#34;无法分配给数组,因为它是一个常量或只读属性&#34;。有人可以修复我的代码吗?谢谢。 : - )

3 个答案:

答案 0 :(得分:2)

使用let代替const

e.g。 let items: Item[] = [];

const声明与let声明类似,但顾名思义,它们的值一旦绑定就无法更改。换句话说,它们具有与let相同的范围规则,但您无法重新分配给它们。

  

let vs. const (docs)

     

鉴于我们有两种具有类似范围的声明   语义学,发现自己要问哪一个使用它是很自然的。   像大多数广泛的问题一样,答案是:它取决于。

     

应用最小特权原则,除了以外的所有声明   你打算修改的那些应该使用const。理由是如果a   变量不需要写入,其他人也一样   codebase不应该自动能够写入对象,而且   将需要考虑他们是否真的需要重新分配到   变量。使用const还可以在推理时使代码更具可预测性   关于数据流。

     

另一方面,让我们不再写出比var更好的了   许多用户会更喜欢它的简洁性。本手册的大部分内容使用   让那些兴趣的声明。

答案 1 :(得分:0)

将错误替换为this.items = data;

答案 2 :(得分:0)

因为您已将其声明为常量。将它声明为类中的属性,然后可以为其赋值

const

如果它们不属于组件类,则将let更改为DECLARE @total_Source AS INT; DECLARE @total_Destination AS INT; DECLARE @total_Blank AS INT; SELECT @total_Source=Count(*) FROM [dbo].A; SELECT @total_Destination=Count(*) FROM [dbo].B; SELECT @total_Blank=Count(*) FROM [dbo].C WHERE ColumnA = ''"; SELECT @total_Source AS Total_Source, @total_Destination AS Total_Destination, @total_Blank AS Total_Blank