【发布时间】:2021-07-05 20:17:30
【问题描述】:
我已经设置了一个可以正确发送数据的 Web API,但是,我的 vuejs 应用程序有一个数据表组件,我使用 BeforeRouteEnter 钩子与 Axios 进行 API 调用,但来自响应的数据不会保存到我的数据变量。
是不是像我的数组queryResult这样的数据变量在我的get请求之后才被加载,因此它无法保存到它?我还尝试将 Axios 代码和变量更新调用为一种方法,但由于某种原因它无法识别方法 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);
});
}
}
});
【问题讨论】:
-
如果您想等到数据加载完毕,请将
next()移入 then(并捕获) -
@Suit Boy Apps 我已经将下一个移到里面,你说得对,它会延迟加载直到数据加载。但是,数据表仍然显示没有可用数据。我可以在 response.data 中看到一个 json 数组,但我认为它没有传递给我的数据部分中的 queryResult 变量。知道这是否是时间问题吗?
-
我看到的另一个问题是 queryResult 是您的数据对象的一部分。所以 queryResult 应该在你的函数内部被称为
this.queryResult。 -
您还应该检查控制台是否有错误,并将 vue 开发工具安装到浏览器中。通过这种方式,您可以实际可视化组件中的数据,然后从那里进行调试。例如:imgur.com/a/n8uwU2k
标签: vue.js vuejs2 vue-component vue-router