我已经设置了一个正确发送数据的Web API,但是,我的vuejs应用程序有一个数据表组件,我使用BeforeRouteEnter
钩子使用Axios进行API调用,但是响应中的数据没有保存到我的数据变量中。
是这样的数据变量,如我的数组称为queryResult
没有加载,直到我的得到请求后,因此它不能保存到它的原因?我还试图调用Axios代码和变量update作为一个方法,但由于某种原因,它无法识别方法queryDB,因此它再次让我相信我的时间已经关闭。
代码如下:
<template id="dashboard">
<div>
<v-card>
<v-card-title>
<v-text-field v-model="search"
append-icon="mdi-magnify"
label="Search"
single-line
hide-details></v-text-field>
</v-card-title>
<v-data-table :headers="headers"
:items="queryResult"
:search="search"></v-data-table>
</v-card>
</div>
</template>
const dashboard = Vue.component('dashboard',
{
template: '#dashboard',
data() {
return {
userID: 'SB',
password: 'Yellow',
search: '',
headers: [
{ text: 'ID', align: 'start', filterable: true, value: 'ID'},
{ text: 'USERNAME', value: 'USERNAME' },
{ text: 'FIRST_NAME', value: 'FIRST_NAME' },
{ text: 'LAST_NAME', value: 'LAST_NAME' },
],
queryResult: [],
}
},
beforeRouteEnter(to, from, next) {
axios.get(window.location.origin + '/home/DapperDatatableLoad', {
params: {}
})
.then(function (response) {
queryResult = response.data;
})
.catch(function (error) {
console.log(error);
});
next()
},
methods: {
queryDB: function () {
axios.get(window.location.origin + '/home/DapperDatatableLoad', {
params: {
}
})
.then(function (response) {
queryResult = response.data;
})
.catch(function (error) {
console.log(error);
});
}
}
});
2条答案
按热度按时间atmip9wb1#
我认为你的意思是路由在你的数据出现之前就加载了。
这是有意义的,因为
axios.get
是异步的。这意味着当axios.get
从服务器请求数据时,主线程仍在执行代码。然后当axios.get
接收到数据时,它会触发.then
回调。在您的例子中,下一个命令是
next()
,它告诉路由器继续前进并继续路由。这意味着当axios.get
正在检索数据时,您已经调用了next()
。如果你想等待axios先获取数据,你需要将
next()
移动到回调函数中。另一种解决方案是改用await语法
u4vypkhs2#
您无法访问
beforeRouteEnter
中的data
React变量,但可以在next
函数中更改它们。你的代码: