【发布时间】:2021-07-08 09:47:34
【问题描述】:
我是 Vue 的新手,我想在每次渲染我的组件时进行一次 AJAX 调用。 我有一个 vue 组件,可以说“测试表”,我想通过 AJAX 调用来获取内容。有很多这样的表,我通过 v-if/v-else-if 等跟踪活动表。
目前我有一个欺骗性的解决方案:在组件的模板中,我通过 {{ getData }}
调用了一个名为 getData 的计算属性,它启动了 Ajax 调用,但只返回一个空字符串。我想切换到正确的方式,但不知道如何。
我的代码是这样的:(它的打字稿)
Vue.component("test-table", {
props: ["request"],
data () {
return {
tableData: [] as Array<TableClass>,
}
},
template: `{{ getData() }} DO SOME STUFF WITH tableData...`,
computed: {
getData() : string {
get("./foo.php", this.request, true).then(
data => this.tableData = data.map(element => new TableClass(data))
)
return "";
}
}
}
HTML:
<test-table v-if="testcounter === 1" :request="stuff...">
<test-table v-else-if="testcounter === 2" :request="other stuff...">
...
get 是一种异步方法,它只是将带有请求数据的 GET 请求发送到服务器。最后一个参数仅用于说明期望 JSON 作为答案的方法。类似于 JQuerys 的 getJSON 方法。
“创建”方法不起作用!它仅在组件首次创建时触发一次。如果我停用并再次激活(使用 v-if),则不会再次调用该方法。
顺便说一句:我使用的是 Vue 2.6.13
【问题讨论】:
-
watch请求,然后触发 getData,这应该是一个方法而不是计算属性 -
哇,这真的可行。你为什么不写答案?你也知道他们为什么拒绝我的问题吗?是不够具体还是……?
标签: javascript vue.js vuejs2