Madrid 9 Feb 2019
🌍 Vue core team
👨💻 Freelance
📍Paris
HTML5 history
Abstracto (SSR, no url)
Móvil
Creación de Rutas
API pública
View Link
page('/users',(context, next) => {
// cargar la pagina de usuarios
next()
})
// aplicar guards
page('/users/:id/edit', checkUser, userProfileEdit)
<Router>
<Home path="/" />
<UserProfileEdit path="/users/:id/edit" />
</Router>
<div>
<Link to="/">Home</Link>
<Link to={`/users/${this.user.id}/edit`} />
</div>
router.push('/search')
<router-view/>
Registro de rutas visitadas
Navegador ↔ URL
push() replace(), ...
listen()
Route matching
match()
Navegación
currentRoute
push() replace(), ...
beforeEach(), ...
Añadir rutas
new Router({ routes })
addRoutes()
<router-view/>
<router-link to="/">Home</router-link>
te falta un "
ok grasias
{
path: '/users/:id',
name: 'UserProfile',
component: UserProfile,
}
<router-link :to="{
name: 'UserProfile',
params: { id: '2' },
}">/users/2</router-link>
<a href="/users/2">/users/2</a>
<router-link to="users/2">
/users/2</router-link>
this.$route
{
path: '/users/2',
name: 'UserProfile',
query: {},
params: { id: '2' },
meta: {}
}
<p>Usuario: {{ $route.params.id }}</p>
created () {
fetch(`/api/users/${this.$route.params.id}`)
.then(/* ... */)
}
this.$route
created () {
fetch(`/api/users/${this.id}`)
.then(/* ... */)
}
{
path: '/users/:id',
name: 'UserProfile',
component: UserProfile,
props: true,
}
te falta un "
ok grasias
router.beforeEach((to, from, next) => {
// verificación de roles
// ...
// solo se puede llamar `next` una vez
next() // siguiente guard
next(false) // anula la navegación
next('/login') // redirige
})
router.afterEach((to, from) => {
// Analyticas, etc
})
{
path: '/admin',
component: AdminPanel,
beforeEnter (to, from, next) {
if (isAdmin) next()
else next(false)
},
}
export default {
name: 'AdminPanel',
data: () => ({ adminInfo: null }),
async beforeRouteEnter (to, from, next) {
const adminInfo = await getAdminInfo()
next(vm => {
vm.adminInfo = adminInfo
})
},
}
export default {
name: 'Document',
async beforeRouteUpdate (to, from, next) {
if (await canReadDocument(to.params.id)) next()
else next(false)
},
}
export default {
name: 'Document',
beforeRouteLeave (to, from, next) {
if (window.confirm('Salir sin guardar?')) {
next()
} else {
next(false)
}
},
}
te falta un "
ok grasias
beforeEach
beforeEnter
beforeRouteEnter
next()
next(false)
➡️ /admin
/admin
#sadreactsonly
Los guardas before* son para UX no para evitar acciones de un usuario
Los guardas before* son para UX no para evitar acciones de un usuario
Los guardas before* son para UX no para evitar acciones de un usuario
Los guardas before* son para UX no para evitar acciones de un usuario
addRoutes()
✅ Previsto para
❌ No previsto para
vue-router/push-state.js
reach-router/history.js