vue-router

安装

	cnpm i vue-router@3 
	//vue2安装vue-router@3 

配置main.js文件

	import VueRouter from 'vue-router'
	import router from './router'
	
	Vue.use(VueRouter)
	
	new Vue({
	router
	}).$mount('#app')

src/router/index.js文件

import VueRouter from 'vue-router'

import RouterQuery from '../view/test9/RouterQuery'  //组件路径
import RouterParams from '../view/test9/RouterParams' //组件路径

export default new VueRouter({
   routes:[
       {//一级路由
           name:'about'
           path: '/params',
           component: RouterParams
           children:[
               {//二级路由路径没有 /
                   path:'params1',
                   component: Params1,
                   children: [
                        {//三级路由
                            name:'msg',
                            path: 'msg',
                            component: Msg,
                        }
                    ]
               },
               {
                   path:'params2',
                   component: Params2,
               }
           ]
       },
       {
           path: '/query',
           component: RouterQuery
       }
   ]   
}) 

使用

<router-link to='' active-class='active'></router-link>
//to后面跟路径
//a标签属性active点击背景高亮,vue-router用active-class='active'
<router-view/>
//指定组件呈现位置

query传参

 <!-- 携带query参数,to的字符串写法 ,多组key:value用&连接-->
 <router-link :to="`/params/params1/msg?name=${item.name}&skill=${item.skill}`">
 //双引号里面时模板字符串,esc按键下
 
 <!-- 携带query参数,to的对象写法 -->
 <router-link :to="{
   path:'/params/params1/msg',
   query:{
     name:item.name,
     skill:item.skill
   }
 }"><router-link>

获取参数

<li>{{$route.query.name}}</li>
//组件实例对象的的$route存有数据

命名路由,简化代码

 <router-link :to="{
   path:'/params/params1/msg',//此处替换  name:'msg',
   query:{
     name:item.name,
     skill:item.skill
   }
 }"><router-link>

prams传参

{
  name:'msg',
  path: 'msg/:name/:skill',  //使用占位符接收
  component: Msg,
}//路由配置

<router-link :to="`/params/params1/msg/${item.name}/${item.skill}`">
<router-link :to="{
			  name:'msg',//params不能用path
              params:{
                name:item.name,
                skill:item.skill
              }
            }"></router-link>      

获取参数

<li>{{$route.prams.name}}</li>

获取参数简化

路由中设置
组件通过props:['name','skill']接收
//props值为对象,,数据固定
  props:{name:1,skill:'hello'},
//只能传递params参数
  props:true,
//params和query都可以  
	props($route){
	    return{
	        name:$route.query.name,
	        skill:$route.query.skill
	    }
	}
------------------
解构赋值连续使用
	props({query:{name,skill}}){
	    return{
	        name,
	        skill
	    }
	}

router-link 的replace属性

<router-link replace></router-link>

replace='true'简写replace
router-link默认push模式,网页可以前进后退,replace模式只能前进

编程式导航

this.$router.push({
		  name:'xxx',
          params:{
                name:xxx,
                skill:xxx
          }
})//跳转可以回退
this.$router.replace({
		  name:'xxx',
          params:{
                name:xxx,
                skill:xxx
          }
})//跳转不可以回退
this.$router.go(x)//x正负数字表示前进或后退几步操作
this.$router.back()//后退
this.$router.forward()//前进

缓存路由组件

<keep-alive include='组件名'>
	<router-view/>//展示内容
</keep-alive>
//保持组件挂载,数据不被replace操作销毁
//不写include展示的都被挂载

<keep-alive :include="['组件名','']">
	<router-view/>//展示内容
</keep-alive>//缓存多个组件

路由组件生命周期钩子

activated(){} //使用是调用
deactivated(){} //不使用时调用
//另一个钩子函数this$nextTick()改变数据,vue操作完页面再执行

路由配置文件中路由守卫

//全局前置路由守卫,路由切换之前调用,初始化调用
router.beforeEach((to,from,next)=>{
    next()
})
//to去哪,from从哪来,next是否执行下一步
//to.path去的路由地址
//to.name去的路由名称
//to.meta.isAuth  给路由加一个meta配置,isAuth是自定义判断逻辑
//全局后置路由守卫,路由切换之前调用,初始后调用
router.afterEach((to,from)=>{
	
})
//独享路由守卫,没有后置
{
  	name:'xxx'
  	path:'/xxx',
    component: xxx,
    beforeEnter: (to, from, next)=>{
        next()
    }
}

组件中路由守卫

//通过路由规则,进入该组件时被调用
beforeRouteInter(to,from,next)=>{
    next()
})
//通过路由规则,离开该组件时被调用
beforeRouteLeave(to,from,next)=>{
    next()
})//这两个是写在组件中的

histroy模式和hash模式
对一个url来说#及其后面内容就是hash值,hash不会带给服务器

const router = new VueRouter({
	mode:'history'//地址栏没有#
})//默认hash,部署项目#后面有信息不会触发网络请求

处理history模式404问题,

npm insatll --save connect-history-api-fallback//安装到node上

const express = require('express')
const history = require('connect-history-api-fallback')

const app = express()
app.use(history())//使用,要在静态模板之前
app.use(express.static(__dirname+'/static'))

app.get('/路径',(req,res)=>{})//处理请求

app.listen(3000,(err)=>{})//3000是自定义端口号,err是错误信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值