Vue Router 路由教程
文章目录
vuerouter_2">1:下载 vue-router
npm install vue-router
vue_7">2:创建 HelloWorld.vue
<template>
<div class="hello">
<h1>HELLO WORLD</h1>
</div>
</template>
<script>
export default {
name: 'HelloWorld',
props: {
msg: String
}
}
</script>
<style scoped>
</style>
3:创建 router.js
import Hello from './components/HelloWorld.vue'
export default {
mode: 'history', //hash/history
routes: [{
path: '/about',
component: Hello,
meta: {
title: '世界你好'
}
}
]
}
4:安装路由(main.js)
import Vue from 'vue'
import VueRouter from 'vue-router'
import App from './App.vue'
import routerConfig from "./router"
Vue.use(VueRouter)
const router = new VueRouter(
routerConfig
);
new Vue({
router,
render: h => h(App),
}).$mount('#app')
vue_68">5:使用路由(App.vue)
<template>
<div>
<router-link style="color:#606266" to="/">LJS</router-link>
<router-link style="color:#606266" to="/about">HELLO</router-link>
<router-view/>
</div>
</template>
<script>
export default {
name: 'App',
components: {
},
}
</script>
<style>
</style>
6:设置每个页面的title
修改全局前置守卫,设置每个页面的title
router.beforeEach((to, from, next) => {//beforeEach是router的钩子函数,在进入路由前执行
if (to.meta.title) {//判断是否有标题
document.title = to.meta.title
}
next()
})
to: Route:
即将要进入的目标 路由对象from: Route:
当前导航正要离开的路由next: Function:
一定要调用该方法来 resolve 这个钩子。执行效果依赖 next 方法的调用参数。
①:next():
进行管道中的下一个钩子。如果全部钩子执行完了,则导航的状态就是 confirmed (确认的)。
②:next(false):
中断当前的导航。如果浏览器的 URL 改变了 (可能是用户手动或者浏览器后退按钮),那么 URL 地址会重置到 from 路由对应的地址。
③:next('/') 或者 next({ path: '/' }):
跳转到一个不同的地址。当前的导航被中断,然后进行一个新的导航。你可以向 next 传递任意位置对象,且允许设置诸如 replace: true、name: ‘home’ 之类的选项以及任何用在 router-link 的 to prop 或 router.push 中的选项。
④:next(error):
(2.4.0+) 如果传入 next 的参数是一个 Error 实例,则导航会被终止且该错误会被传递给 router.onError() 注册过的回调。
修改 main.js
import Vue from 'vue'
import VueRouter from 'vue-router'
import App from './App.vue'
import routerConfig from "./router"
Vue.use(VueRouter)
const router = new VueRouter(
routerConfig
);
router.beforeEach((to, from, next) => {//beforeEach是router的钩子函数,在进入路由前执行
if (to.meta.title) {//判断是否有标题
document.title = to.meta.title
}
next()
})
new Vue({
router,
render: h => h(App),
}).$mount('#app')