Передача реквизита с программной навигацией Vue.js

У меня есть компонент Vue, у которого есть указатель с названием 'title', например:

<script>
export default {
  props: ['title'],
  data() {
    return {
    }
  }
}
</script>

Я перехожу к компоненту программно после завершения определенного действия. Есть ли способ программно маршрутизировать пользователя, одновременно устанавливая значение prop? Я знаю, что вы можете создать ссылку вроде этого:

<router-link to="/foo" title="example title">link</router-link>

Однако есть ли способ сделать что-то вроде следующего?

this.$router.push({ path: '/foo', title: 'test title' })

EDIT:

Как я уже сказал, я изменил свой маршрут на следующее:

   {
      path: '/i/:imageID',
      component: Image,
      props: true
    }

И переход к следующему:

this.$router.push({ path: '/i/15', params: {title: 'test title' }})

Однако мой компонент изображения (шаблон - см. ниже) по-прежнему не имеет названия.

<h1>{{ title}}</h1>

Есть ли что-то, что может вызвать проблемы?

Ответ 1

Использовать параметры.

this.$router.push({ name: 'foo', params: {title: 'test title' }})

Примечание. Вы должны указать name. Это не работает, если вы вызываете this.$router.push с помощью path.

И установите маршрут для приема параметров как реквизитов.

{path: "/foo", name:"foo", component: FooComponent,  props: true}

props: true задокументирован здесь.

Ответ 2

Документы vue-router четко указывают, что params работает только с name, а не с path.

// set  props: true in your route definition
const userId = 123
router.push({ name: 'user', params: { userId }}) // -> /user/123
// This will NOT work
router.push({ path: '/user', params: { userId }}) // -> /user

Если вы используете path, передайте параметры в самом пути или используйте query, как показано ниже:

router.push({ path: '/user/${userId}' }) // -> /user/123

// with query, resulting in /register?plan=private
router.push({ path: 'register', query: { plan: 'private' }})

Ответ 3

Встречается та же проблема с дочерними маршрутами, определенными в роутере. Ниже на router.js показаны дочерние маршруты, сопоставленные с именованным

<router-view name="create"></router-view>
<router-view name="dashboard"></router-view>

router.js

    {
      path: "/job",
      name: "Job",
      component: () => import("./views/JobPage"),
      children: [
        {
          path: "create",
          name: "JobCreate",
          components: {
            create: JobCreate
          }
        },
        {
          path: ":id",
          name: JobConsole,
          components: {
            dashboard: JobConsole
          }
        }
      ]
    },

Когда я пытаюсь передать реквизиты из create, vue-router не удается получить динамическое соответствие маршрута, необходимое для JobConsole:

      this.$router.push(
        {
          name: "Job",
          params: {
            id: this.ID_From_JobCreate
          }
      )