1 .安装 npm install vue-router --save 2 .main.js中 //Vue路由:引入 import VueRouter from 'vue-router' Vue.use(VueRouter) //Vue路由:引入并创建组件 import BYHome from './components/BYHome.vue' import BYNews from './components/BYNews.vue' import HelloWorld from './components/HelloWorld.vue' //Vue路由:配置路由 const routes = [ {path: '/home', component: BYHome}, {path: '/news', component: BYNews}, {path: '/helloworld', component: HelloWorld}, {path: '*', redirect: '/home'} /*默认跳转路由 */ ] //Vue路由:实例化VueRouter const router = new VueRouter({ routes //缩写,相当于 routes:routes }) new Vue({ router, //Vue路由:挂载路由 render: h => h(App), }).$mount('#app') //Vue路由:根组件的模板里面放上下面这句话,需要在App.vue 中配置路由出口:路由匹配到的组件将渲染在根组件App.vue中 <router-view></router-view> //路由跳转 <router-link to="/home">首页</router-link> <router-link to="/news">新闻</router-link> <router-link to="/helloworld">helloWorld</router-link>
1.安装
npm install vue-router --save
2.创建router.js文件,在该文件中配置路由并暴露出去
import Vue from 'vue'; //Vue路由:引入 import VueRouter from 'vue-router' Vue.use(VueRouter) //Vue路由:引入并创建组件 import BYHome from '../BYHome.vue' import BYNews from '../BYNews.vue' import HelloWorld from '../HelloWorld.vue' //Vue路由:配置路由 const routes = [ {path: '/home', component: BYHome}, {path: '/news', component: BYNews}, {path: '/helloworld', component: HelloWorld}, {path: '*', redirect: '/home'} /*默认跳转路由 */ ] //Vue路由:实例化VueRouter const router = new VueRouter({ routes //缩写,相当于 routes:routes }) //Vue路由:需要在App.vue 中配置路由出口:路由匹配到的组件将渲染在根组件App.vue中 /* <router-view></router-view> */ //暴露出去 export default router;
3.在main.js中
//Vue路由:引入路由文件
import router from ‘./components/jsTool/router.js’new Vue({
router, //Vue路由:挂载路由
render: h => h(App),
}).$mount(’#app’)
4.Vue路由:根组件的模板里面放上下面这句话,需要在App.vue 中配置路由出口:路由匹配到的组件将渲染在根组件App.vue中
<router-view></router-view>
5.路由跳转
<router-link to="/home">首页</router-link> <router-link to="/news">新闻</router-link> <router-link to="/helloworld">helloWorld</router-link>
1.获取路由的get传值
//路由配置
import BYHomeDetail from '../BYHomeDetail.vue' {path: '/homeDetail', component:BYHomeDetail}, //跳转时跟get参数 <li li v-for="(listItem,homeKey) in msglist"> <router-link :to="'/homeDetail?id='+homeKey"> {{listItem.title}} </router-link> </li> //子页面获取路由的get传值 mounted(){ console.log(this.$route.query); }
2.动态路由传值
//路由配置:带形参 import BYNewDetail from '../BYNewDetail.vue' {path: '/newDetail/:aid', component: BYNewDetail}, //跳转时传值 <li v-for="(item,key) in list"> <!-- 给 newDetail 传值 --> <router-link :to="'/newDetail/'+key">{{key}}--{{item}}</router-link> </li> //子页面获取动态路由传值 mounted(){ console.log(this.$route.params); }
{path: '/news', component: BYNews}, this.$router.push({path:'news'}); 带参: {path: '/newDetail/:aid', component: BYNewDetail}, this.$router.push({path:'/newDetail/495'});
第二种跳转方式:命名路由
{path: '/news', component: BYNews,name:'news'}, this.$router.push({name:'news'}); 带参: this.$router.push({name:'news',params:{userId:123}});
默认是hash模式,路由上方的路径是用#表示,http://localhost:8080/#/news
可以将hash模式改为history模式,路由上方的路径就没有了
#,http://localhost:8080/news 如果有history模式,需要后台做一些配置 //Vue路由:实例化VueRouter const router = new VueRouter({ mode: 'history', //若是默认的hash模式,则mode不需要写 routes //缩写,相当于 routes:routes })
User.vue页面中有两个子页面
UserAdd.vue
UserList.vue
//路由的配置 import BYUser from '../BYUser.vue' import UserAdd from '../User/UserAdd.vue' import UserList from '../User/UserList.vue' {path: '/user' , component:BYUser, children:[ {path: 'useradd',component:UserAdd}, {path: 'userlist',component:UserList} ] }, //路由的跳转 <div> <div class="left"> <ul> <li> <router-link to="/user/useradd"> 增加用户 </router-link> </li> <li> <router-link to="/user/userlist"> 用户列表 </router-link> </li> </ul> </div> <div class="right"> <router-view></router-view> </div> </div>
1.创建一个localstorage本地存储类storage.js,用来记录登录状态
var storage={ set(key,value){ console.log("storage---->") console.log(value) localStorage.setItem(key, JSON.stringify(value)); }, get(key){ return JSON.parse(localStorage.getItem(key)); },remove(key){ localStorage.removeItem(key); } } export default storage;
2.创建一个自定义的路由表:router.js
import Vue from 'vue'; //引入路由 import VueRouter from 'vue-router' Vue.use(VueRouter) //设置路由表 const routes = [ { path: '/', redirect: '/home' }, {path: '/404', component: resolve => require(['../common/404.vue'],resolve)}, {path: '/login', component: resolve => require(['../page/Login.vue'],resolve)}, {path: '/home',component: resolve => require(['../page/Home.vue'],resolve),meta:{requireAuth:true}},//加上meta 表示需要登录才可进入 { path:'*', redirect:'/404' } ] //实例化路由并指定模式 const router = new VueRouter({ /*默认是hash模式,路由上方的路径是用#表示,http://localhost:8080/#/news 可以将hash模式改为history模式,路由上方的路径就没有了#,http://localhost:8080/news 如果有history模式,需要后台做一些配置 */ // mode:'history', routes //缩写,相当于 routes:routes }) //暴露出去,供外部调用 export default router;
3.在main.js中配置钩子路由:
//引入自定义的路由表 import router from './components/router/router.js' //引入localstorage本地存储管理 import storage from "./components/Tools/storage.js"; /**在路由跳转之前执行 * to: 即将进入的路由对象 * from: 当前导航即将离开的路由 * next:Function,进行管道中的一个钩子,如果执行完了,则导航的状态就是 confirmed (确认的);否则为false,终止导航。 * */ router.beforeEach((to, from, next) => { //需要登录,但未登录者可以跳转到登录页面 const isLogin = storage.get('login'); if(!isLogin && to.meta.requireAuth){//未登录 且 需要登录(提前在路由表中加上meta) next({ path:'/login' }) }else{//其他 next(); } });
4.登录及退出登录
登录: console.log("登录成功"); let flag = true; storage.set('login',flag);//存储登录状态 this.$router.push('/');//按路由规则跳转 退出登录: console.log("退出登录"); let flag = false; storage.set('login',flag);//存储登录状态 this.$router.push('/login');//按路由规则跳转