将meta传递给vue路由器

时间:2019-01-15 18:51:31

标签: vue.js vue-router

我有一个用vue-router创建的路由。

{
    path: '/events/:id',
    component: Event,
    name: 'Event',
    meta: {
        title: 'Design Web'
    }
},

在“元”中,我为其指定页面名称。

我可以通过以下方式调用页面标题:$route.meta.title

但是现在,我面临一个问题。在页面标题中,我想传递一个变量(事件的名称)。

meta: {
  title: $nameOfEvent
}

怎么办?

谢谢

1 个答案:

答案 0 :(得分:0)

如果将title属性定义为函数,则可能是这样:

{
  meta: { title: route => { /* return custom title based on route, store or anything */ } }
}

router.beforeEach((to, from, next) => {
  if (to.meta.title) {
    document.title = to.meta.title(to);
  }
  next();
})

Codepen:https://codepen.io/anon/pen/roRmdo?editors=1111(您需要检查内部iframe以查看标题更改)。

或创建指令:

Vue.directive('title', {
  inserted: (el, binding) => document.title = binding.value,
  update: (el, binding) => document.title = binding.value
})

然后在路由器视图组件上使用该指令:

<router-view v-title="title" ></router-view>

组件:

export default {
  data(){
    return {
      title: 'This will be the title'
    }
  }
}

来源:https://github.com/vuejs/vue-router/issues/914