Принудительно не использовать один и тот же экземпляр компонента для динамических маршрутов, vue-router

#vue.js #vue-router #dynamic-routing

#vue.js #vue-маршрутизатор #динамическая маршрутизация

Вопрос:

У меня есть динамический маршрут с vue-router примерно так,

 import customReportWrapper from './customReportWrapper.vue';

let router = new Router({
  mode: 'history',
  routes: [{
      path: '/insights/custom-reports/:id',
      name: 'custom-reports',
      page: 'insights',
      component: customReportWrapper
  }]
})

  

Каждый раз, когда кто-то переходит к этому маршруту, для визуализации будет использоваться CustomReportWrapper.vue. Но каждая навигация использует один и тот же экземпляр компонента, как указано в документах vue-router здесь .

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

Ответ №1:

Вам просто нужно добавить :key="$route.path" его в свой родительский компонент.

Что-то вроде:

App.vue

 <template>
  <main :key"$route.path">
    <router-view></router-view>
  </main>
</template>
  

Объяснение

Ключ действует как своего рода флаг, который сообщает Vue «если данные, связанные с этим дочерним компонентом, перемещены куда-то еще, переместите компонент вместе с ним, чтобы сохранить изменения, которые уже существуют». Поскольку вы перешли к тому же компоненту (тот же маршрут, но просто другой :id ), вы хотите повторно отобразить компонент. Будьте осторожны с этим подходом: он повторно отображает все компоненты и подкомпоненты

Ответ №2:

В шаблоне есть опечатка:key=»$route.path», а не $router:

 <template>
  <main :key="$route.path">
    <router-view></router-view>
  </main>
</template>