我有一个需要一组对象的Angular组件!我编写了用于在服务中获取数组的代码:
private roles_list = [];
getRoles(): any[] {
return this.roles_list;
}
roles(){
const promise = new Promise( (resolve, reject) => {
return this._http.get('/api/getData')
.subscribe(data => {
//this.roles_list = data
for (var i=0 ; i < Object.keys(data).length ; i++){
var temp = {};
temp["role"] = "role";
temp["value"] = data[i].key;
this.roles_list.push(temp);
}
console.log("data");
console.log(data);
console.log("roles_list");
console.log(this.roles_list);
resolve(this.roles_list);
},
err => {
reject(err);
});
});
return promise;
}
然后我解决了组件中的承诺:
private roles = [];
this.getDataService.roles().then(res => {
console.log(typeof(res));
this.roles = res.map(o => {
return {name: o.name,role: o.role}
});
});
然而,这会引发各种错误,它说&#34;地图方法不适用于{}&#34;虽然res应该是一个数组而不是一个对象?任何帮助表示赞赏。
编辑:我通过resolve()发送JSON对象然后对组件的ngInit()进行处理解决了这个问题,有人知道为什么会出现这个问题吗?我们只能通过解决方式发送对象吗?
答案 0 :(得分:0)
试试这个
private roles = [];
this.getDataService.roles().then(res => {
console.log(typeof(res));
for(let r of res){
this.roles.push({name: r.name,role: r.role})
}
});
答案 1 :(得分:0)
我弄清楚问题是什么,显然承诺只能通过它的解决方法传递单个对象。因此,当我通过它传递一个对象数组时,它认为它只是一个对象,显然,一个对象不能分配给一个对象数组。 这样做的方法是在服务中创建一个observable并在组件中订阅它。