[英]Vue.js component method on creation
我是 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
如果组件被缓存、保持活动等,生命周期钩子不会每次都触发
在每个生命周期挂钩中添加一个 console.log 以查看。
如果请求发生变化,更改为使用一个处理再次触发 getData 的watcher
程序。
...
watch: {
request: {
handler: function() {
this.getData()
},
deep: true
}
},
created() {
this.getData()
},
methods: {
getData(): string {
// do request
}
}
如果您的组件使用v-if
连续渲染/不渲染,您应该能够使用mounted
的钩子,如下所示:
export default {
mounted() {
// do ajax call here
this.callAMethod();
},
...
}
或者,您可以使用created()
挂钩,但它在链中较早执行,因此这意味着尚未创建 DOM 模板,因此您无法引用它。 mounted
通常是要走的路。
更多关于这些钩子的信息可以在这里找到。
@FlorianBecker 尝试生命周期钩子updated()
。 它可能更适合您想要实现的目标。 文档在这里。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.