我在服务中有一个方法(我的应用程序是一个用TypeScript编写的Angular 5应用程序),它接受两个参数,一个是事件对象,另一个是字符串,它是我存储的对象的键。浏览器的网络存储。
该方法将新对象分配给浏览器的Web存储,并将其与第二个对象组合,这是我的代码
setPaginationObject(event: any, list: string) {
let sitePagination = JSON.parse(sessionStorage.getItem('sitePagination')) || {};
sitePagination = Object.assign(sitePagination, {list: event});
sessionStorage.setItem('sitePagination', JSON.stringify(sitePagination));
}
以下是我在组件中调用的方式:
public onPaginateChange(event: any): void {
this.paginationService.setPaginationObject(event, 'usersList');
}
我的问题是我需要将参数分配给Object.assign
代码中使用的动态属性,因为当前声明使用标签“list”而不是作为参数传递的字符串。如何在我的方法中传递参数并动态地将其用作关键名称/标签Object.assign第二个参数?
我以为我可以这样做:
sitePagination = Object.assign(sitePagination, {`${list}`: event});
但是这不起作用,或者我可以将参数签名更改为类似的东西,因此对象在组件中而不是服务中格式化
this.paginationService.setPaginationObject({'usersList': event});
并在服务中
setPaginationObject(obj: any) {
let sitePagination = JSON.parse(sessionStorage.getItem('sitePagination')) || {};
sitePagination = Object.assign(sitePagination, obj);
sessionStorage.setItem('sitePagination', JSON.stringify(sitePagination));
}
上面似乎很好,但我现在只想知道如何在Object.assign
代码中动态设置密钥名称。
提前致谢,对不起,如果我的措辞不好,如果是的话,我会返工。
答案 0 :(得分:4)
您可以在对象文字中使用计算属性:
let list: string = 'userList'
let obj = {[list]: 'Value'}; // will be { 'userList': 'Value'} at runtime