Skip to content

Slot RouterView

El componente RouterView expone un slot que puede ser usado para renderizar el componente de la ruta:

template
<router-view v-slot="{ Component }">
  <component :is="Component" />
</router-view>

El código anterior es equivalente a usar <router-view /> sin el slot, pero el slot proporciona flexibilidad extra cuando queremos trabajar con otras funcionalidades.

KeepAlive y Transición

Cuando trabajamos con el componente KeepAlive, normalmente queremos que mantenga vivos los componentes de la ruta, no el propio RouterView. Podemos conseguirlo poniendo el KeepAlive dentro del slot:

template
<router-view v-slot="{ Component }">
  <keep-alive>
    <component :is="Component" />
  </keep-alive>
</router-view>

Del mismo modo, el slot nos permite utilizar un componente Transition para la transición entre componentes de ruta:

template
<router-view v-slot="{ Component }">
  <transition>
    <component :is="Component" />
  </transition>
</router-view>

También podemos utilizar KeepAlive dentro de un componente Transition:

template
<router-view v-slot="{ Component }">
  <transition>
    <keep-alive>
      <component :is="Component" />
    </keep-alive>
  </transition>
</router-view>

Para más información sobre el uso de RouterView con el componente Transition, consulta la guía Transitions.

Pasando props y slots

Podemos usar el slot para pasar props o slots al componente de ruta:

template
<router-view v-slot="{ Component }">
  <component :is="Component" some-prop="a value">
    <p>Some slotted content</p>
  </component>
</router-view>

En la práctica, esto usualmente no es algo que quieras hacer, ya que los componentes de ruta todos necesitarían usar los mismos props y slots. Consulta Pasando Props a Componentes de Ruta para otras formas de pasar props.

Template refs

Usar el slot nos permite poner un template ref directamente en el componente de ruta:

template
<router-view v-slot="{ Component }">
  <component :is="Component" ref="mainContent" />
</router-view>

Si por el contrario pusiéramos el ref en <router-view> entonces el ref se poblaría con la instancia RouterView, en lugar de con el componente de ruta.

Publicado bajo licencia MIT.

Build faster with AI
New Masterclass to help you leverage AI in your Vue workflow.
Get Early Access