我正在使用vue meta动态更改我的meta标记.我只想在某些特定页面上更改它.

我正在使用metaInfo函数并try 更改,例如,标题.但是我的getter中的数据是未定义的,这就是为什么我不能更改meta标记中的标题.metaInfo函数似乎试图在组件实际拥有数据之前访问数据.

以下是我在组件中的代码:

<template>
...
</template>

<script>
 export default {
     metaInfo() {
       return {
         title: this.getViewPage.data.meta.title, // data is undefined
    };
  },
  created() {
     this.loadViewPage();
  },
  computed: {
     ...mapGetters(['getViewPage']),
  },
  methods: {
     ...mapActions(['loadViewPage']),
};
</script>

推荐答案

vue-meta只是从metaInfo函数中创建计算(computed)属性(根据插件源代码),所以我假设loadViewPage操作异步填充data对象,您的问题只是转换为空判断问题.

所以,在使用数据的属性之前,您应该判断数据,在加载数据时,metaInfo也会更新对象:

     metaInfo() {
         // don't know your return object structure, 
         // maybe you should check whole this.getViewPage
         let data = this.getViewPage.data; 
         return {
             title: data ? data.meta.title : "some placeholder title",
         }
     };

Vue.js相关问答推荐

Vue3:如何在功能组件中重用插槽vnode

使用nuxt I18N验证规则消息翻译

点击屏幕的任何位置都会禁用v-overlay

Vue 3 如何通过多个组件传递插槽

Webpack 编译错误:TypeError: __WEBPACK_IMPORTED_MODULE_1__ … is not a function

在 Vuex 的状态下动态创建一个响应式数组

如何使用带有自定义标签和类的`transition-group`

如何只查看数组中的一个对象?

VueJS:向左,元素的顶部位置?

带有 vue.js 的 img 网址

根据 URL 有条件地隐藏视图组件

在 Vuejs 中Watch观察 window.scrollY 的变化

v-for 中的 VueJS 插槽

SassError:媒体查询表达式必须以(开头

包含 Vue 组件的 HTML 字符串的 Nuxt 渲染函数

Select 下拉列表中的复选框后如何清除 v-autocomplete(多个)搜索输入?

如何避免在 Vue 中一直写 this.$store.state.donkey 的需要?

依赖关系甚至在 package.json 和 node_modules 中都没有定义

NPM:403 禁止 - PUT http://registry.npmjs.org/[package-name] - 禁止

为什么 router.currentRoute.path 没有react?