![](/img/trans.png)
[英]How can i post Array Data with Vue axios from Data obtained from an API
[英]How to search an array of objects obtained by axios for an id? Vue 2
我正在尝试验证用户是否在我通过 axios 捕获的列表中,问题是我使用了 FILTER 选项,但它总是返回未定义或 [],即如果用户存在于该数组中。
我想不出还能做什么,因为我通过 console.log() 验证它是否是我询问的变量以及它是否带来数据。
created() {
this.getStagesDefault()
this.getSalesman()
this.getStagesAmountByUser()
},
methods: {
async getSalesman(){
const { data } = await axios.get('salesman')
this.employees = data.data
},
getStagesAmountByUser(){
console.log(this.user['id'])
var objectUser = this.employees.filter(elem => {
return elem.id === this.user['id']
})
console.log(objectUser)
},
安慰
数据
getSalesman
是一个异步方法。 在过滤时,被过滤的数组仍然是空的。
this.getSalesman() // this runs later
this.getStagesAmountByUser() // this runs right away
通过等待异步方法让方法按顺序运行:
await this.getSalesman()
this.getStagesAmountByUser()
getSalesman 方法是异步的。 这意味着“getStagesAmountByUser”将在“getSalesman”完成之前开始执行。
解决问题的2种方法:
created: async() =>{ this.getStagesDefault() this.getSalesman() this.getStagesAmountByUser() }
created(){ this.getStagesDefault() this.getSalesman().then( () => this.getStagesAmountByUser()) }
如果您将 id 传递给后端并且仅通过该 id 传递 select,则可以避免低效的客户端过滤。
此外,除非您销毁同样低效的组件,否则 created 只会被调用一次,因此请注意user.id
何时更改然后再次调用您的方法。
另外不要忘记您必须将任何异步代码包装在 try/catch 中,否则当找不到用户/推销员等时您将收到未捕获的错误等,您可以将 console.error 替换为告诉用户错误的内容。
{ data: () => ({ employee: {} }), watch: { 'user.id' (v) { if (v) this.getEmployee() } }, created() { this.getEmployee() }, methods: { getEmployee() { if (typeof this.user.id === 'undefined') { return } try { const { data } = await axios.get(`salesman/${this.user.id}`) this.employee = data.data } catch (e) { console.error(e) } } } }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.