Установите заголовок страницы в зависимости от параметров маршрутизатора Vue

#vue.js #vue-router #meta

Вопрос:

Я не уверен, возможно ли это, но вот:

Я пытаюсь сделать так, чтобы в заголовке страницы (метатеге) отображалось имя пользователя профиля, в котором вы находитесь в данный момент. Мой код выглядит следующим образом:

 export default new Router({
  mode: "history",
  base: process.env.BASE_URL,
  routes: [
    {
      path: "/profile/:userId/",
      name: "profile",
      component: Profile,
      meta: {
        title: "Profile - ((USERID HERE))", // <-- Find how to insert :userId into page title
      },
    },
 

Какие-либо советы о том, как это сделать, или возможно ли вообще иметь динамические заголовки страниц с помощью маршрутизатора vue? Спасибо.

Ответ №1:

Вам нужно будет установить заголовок для каждой записи маршрутизатора

 const router = new Router({
  mode: "history",
  base: process.env.BASE_URL,
  routes: [
    {
      path: "/profile/:userId/",
      name: "profile",
      component: Profile,
      meta: {
        title: "Profile - ((USERID HERE))", // <-- Find how to insert :userId into page title
      },
    },
//Other properties
})

router.beforeEach((to, from, next) => {
 // You have access to the route here so you could dynamically get the variable? to.params? (Sorry for editing this post as didn't see the full question!)

 document.title = to.meta.title ? to.meta.title : "Some Default Title"

 // Edit 2 it seems params contains the thing you need so you could detect if to.meta.title is a thing and dynamically change it `Profile - (${to.params.userId})`
 next() // You must call next!
})

export default router
 

Ответ №2:

вы можете использовать реквизит маршрутизатора в качестве функции, поэтому вместо передачи реквизита userId , передайте реквизит title примерно так:

 routes: [
    {
      path: "/profile/:userId",
      name: "profile",
      component: Profile,
      props: route => ({ title: `Profile ${route.params.userId}` })
    },
]
 

вы можете прочитать больше об этом в документах vue

Комментарии:

1. Спасибо, но, к сожалению, не будет работать с этим текущим проектом, с которым я работаю. Ценю вашу помощь

2. Что у вас не работает? может быть, я могу помочь?

3. В частности, я пытаюсь избежать изменения имени пути. Я бы предпочел, чтобы он оставался «/профиль/:идентификатор пользователя/» и не использовал запрос, если это возможно.

4. Я обновил ответ в соответствии с вашими требованиями

5. Мне удалось заставить его работать с другим решением, но большое вам спасибо за вашу помощь!