我要在提供程序 @Injectable 上声明一个数组,以在不同组件中使用它。
normeList: any[] = [
{
name: 'choice 1',
type:'false'
},
{
name: 'choice 2',
type:'false'
}
];
在组件上,我这样分配了该数组:
this.myArray = [].concat(this.sharedListDeclarationProvider.normeList);
在视图上,我正在使用myArray
,并且正在将type
上的myArray
从false更改为true;
问题在于组件上的'myArray'和提供程序上声明的normList
也在更改。
如何在不更改myArray
的情况下更改normeList
的值
答案 0 :(得分:1)
您可以使用 JSON.parse 和 JSON.stringify
this.myArray = JSON.parse(JSON.stringify((this.sharedListDeclarationProvider.normeList));
答案 1 :(得分:1)
我想您想从提供者那里克隆normeList
数组,并在您的组件中使用它。
如果要复制数组而没有突变或没有副作用,则可以使用slice
数组方法,但这仅适用于简单数组。对于复杂的数组,您可以使用
JSON.parse(JSON.stringify(array))
map
与Object.assign
组合使用因此,您可以重写以下行
this.myArray = [].concat(this.sharedListDeclarationProvider.normeList);
使用
this.myArray = this.sharedListDeclarationProvider.normeList.map(item=>Object.assign({}, item));
甚至使用ES6传播算子更短
this.myArray = this.sharedListDeclarationProvider.normeList.map(item=>{}..item));