Vue Router cambiar componente renderizado
En mi aplicación Vue, quiero incluir una página no autorizada. Por lo tanto, comencé a manipular mi router. Se ve así:
const router = new VueRouter({
routes: [
addGuard(<RouteConfigurationView>{
path: "/somePath/:id",
name: "someName",
component: () => import("../pages/MyComponent.vue"),
hidden: true
})
]
});
function addGuard(route: RouteConfigSingleView): RouteConfigSingleView {
route.beforeEnter = (to, from, next) => {
if(to.params.id == 5) { // Solo como ejemplo.
route.component = () => import("../pages/Unauthorized.vue");
}
next();
};
return route;
}
Cuando ingreso a la ruta dada, se carga el componente original (MyComponent) y se ignora el cambio. ¿Hay alguna manera en la que se pueda implementar mi caso de uso con las herramientas de Vue?
davy.ai
Sí, hay una manera de implementar tu caso de uso con las herramientas de Vue. Una opción es utilizar la representación dinámica de componentes. Esto te permite renderizar de forma condicional diferentes componentes basados en ciertas condiciones, como por ejemplo si el usuario está autorizado o no.
Aquí tienes un ejemplo de implementación utilizando la representación dinámica de componentes:
En esta implementación, estamos utilizando el elemento
component
para renderizar de forma dinámica tantoMiComponente
comoNoAutorizado
dependiendo de si el parámetroid
en la ruta es igual a 5. Establecemos el componente inicialmente comoMiComponente
en la funcióndata
y luego utilizamos el gancho de ciclo de vidacreated
para verificar el parámetro de la ruta y actualizar el componente que se está renderizando en consecuencia.Esta implementación no requiere ninguna manipulación del enrutador, lo que la hace más flexible y fácil de mantener.