javascript - 如何在路由/网址更改时更新 vue-meta?
问题描述
路线更改时,我网站上的元数据不会更新。路线本身有一个watch
可以很好地更新视图,但从metaInfo()
没有vue-meta
跟上。我的<script>
代码部分如下所示:
<script>
export default {
name: "Product",
watch: {
'$route.params.ProductID': {
deep: true,
immediate: true,
handler() {
this.getProduct(); // calls getProduct() on route change. Can I also call metaInfo() from here somehow?
}
}
},
metaInfo() {
return {
title: this.Product.ProductTitle,
meta: [
{
name: 'description', content: this.Product.ProductTitle
}
]
}
},
computed: {
Product() {
return this.$store.getters.getProduct
}
}, mounted() {
if (this.Product == null || !this.Product.length) {
this.getProduct();
}
}, methods: {
getProduct() {
return this.$store.dispatch('loadProduct', {ProductID: this.$route.params.ProductID})
}
}
}
</script>
发生的事情是,当我更改路线并从/product/123
to/product/124
时,metaInfo()
仍然显示/product/123
. 如果我点击刷新,则metaInfo()
更新并显示/product/124
.
我需要watch
触发更新metaInfo()
但不知道该怎么做。我在任何地方的文档中都找不到此信息。请帮忙?
解决方案
对于反应式,在 return 语句之外使用变量。
metaInfo() {
const title = this.Product.ProductTitle;
return {
title: title,
meta: [
{
name: 'description', content: title
}
]
}
}
https://vue-meta.nuxtjs.org/guide/caveats.html#reactive-variables-in-template-functions
推荐阅读
- css - 我在设置 coreui 管理模板时遇到问题
- c++ - 将 c++ 库与 cmake 链接的问题
- amazon-web-services - 扩大规模时 Cloudwatch 不发送电子邮件通知
- visual-studio-code - 滚动鼠标滚轮时VSCode编辑器窗口间歇性跳到底部
- ffmpeg - 有没有办法用ffmpeg“裁剪”基于位图的字幕?
- go - 在包含 ANSI 转义码的字符串中的第 80 个字符后自动添加新行
- kubernetes - 如何使用 Terraform 创建一个健康的 VPC-Native GKE 集群?
- visual-studio-code - VS Code 和 Jupyter Notebook - 如何在文本编辑器中打开大输出?
- javascript - 通过 JS 或 jquery 更改 a href 参数
- django - 无法使用 select_related django 获取相关表字段数据