当前位置: 首页 > article >正文

vue-router的详细安装及配置

目录

1、安装路由,

2、 引入并配置路由

3、 路由的视图展示

4、 路由跳转方式以及传递参数

5、路由组件独有的两个钩子函数(也称之为生命周期),用于捕获路由组件的激活状态。

6、路由的导航守卫 


1、安装路由,

vue 给我们提供了路由功能,该包需要单独安装。

npm install vue-router -S

 如果你的vue版本是2.0+ 那就要安装 vue-router@3 版本一下的,因为vue-router@4的版本只适合vue3,用在vue2.0+ 会报错。用在vue2.0+会报错

npm install vue-router@3 //指定下载3版本

如果安装错了使用一下命令删除

npm uninstall vue-router

2、 引入并配置路由

在src下创建一个 router.js文件,用来编写路由信息 

import Vue from "vue";//引入vue
import VueRouter from "vue-router";//引入vue路由

import Home from "@/components/nav/Home.vue";//首页
import Search from "@/components/nav/Search.vue";//探索
Vue.use(VueRouter);//挂在路由插件
const routes = [//路由表示的是url和组件的一一对应的关系,使用path属性表示url路径,使用component属性表示组件
    
    {
        name:'Nhome',//Home
        path:'/home',
        component:Home,
    },
   
    {
        name:'Nsearch',//探索
        path:'/search',
        component:Search
    },
]
const router = new VueRouter({// 生成一个路由实例
    routes// 配置项-配置视图和路由之间的对应关系
});
//修改原型对联 的push 
const originalPush = VueRouter.prototype.push;
VueRouter.prototype.push = function push(location) {
  return originalPush.call(this, location).catch(err => err)
}
//导航守卫
// router.beforeEach((to,from,next)=>{
//     console.log(to,from)
//     next();
// })

export default router // 导出路由实例

路由中的配置对象

  1. name:给当前路由组件定义的名字。
  2. path:跳转时的路径,比如:this.$router.push('/about');
  3. component:引入外部资源 路径的名称。
  4. childen:[] 路由嵌套 是个数组形式 当前路由组件下的 子路由,也可以多级嵌套。
  5. meta:{} 路由元 可以设置一些自己的配置 平且可以在路由实例中拿到 meta对象,meta名字是固定的不能修改成其他的。
  {
        name:"给路由起的名字",
        path:"/about",//路径
        component:"About",//引入的外部资源 比如import About from '@/index/index'
        childen:[            // 嵌套路由
            {
                name:"xxxx",
                path:"xxx",
                component:"xxx"
            }
        ],
        meta:{},//路由元 自定义配置
    } 

并且在main.js 中引入 vue路由实例 

import Vue from 'vue'
import App from './App.vue'
import router from './router'//引入路由
import store from './store/store'//引入vuex
import i18n from './lang/index'
Vue.config.productionTip = false//关闭vue中的提示 true 是开启
Vue.use(ElementUI);//挂在ElementUI

new Vue({
  render: h => h(App),
  router,//路由
  store,// 在这里注入store实例后,所有的组件都可以通过 this.$store去访问store实例
  i18n
}).$mount('#app')

3、 路由的视图展示

<router-view>
    //路由组件 在这里面显示
</router-view>

4、 路由跳转方式以及传递参数

第一种标签跳转 router-link 

to=" ":你要去哪里 直接写 路径地址 就是你配置在router.js 中的path的地址。

active-class=" ":被激活之后的样式 点击选中后会执行这里面的样式。

replace :作用:控制路由跳转时操作浏览器历史记录模式

        浏览器的历史记录有两种写入方式:分别时push和replace, 
                            push是追加历史记录,     
                            replace是替换当前记录(注意:是替换当前的), 路由跳转时候默认为push, 
                            如何开启在 <router-link replace> </router-link>

<router-link replace to="/home/?id=1&tilet='哈哈'" active-class="active"></router-link>

第二种编程式跳转以及携带参数

不携带参数的写法

this.$router.push("/home");

携带参数的写法

pushShow(m){
    this.$router.push({
		name:'nihao',
		query:{
		    id:m.id,
		    title:m.title
	    }    
    })
}

 还有就是上面所说的 replace 浏览器的历史记录,分别时push和replace, 以上两种都是push 追加历史记录,

下面这个是replace 替换历史记录,路由默认的是push追加。

replace的编程式路由导航
		pushShow(m){//m 传递的参数
			this.$router.replace({
				name:'nihao',
				query:{
					id:m.id,
					title:m.title
				}
			})
		}

5、路由组件独有的两个钩子函数(也称之为生命周期),用于捕获路由组件的激活状态。

1、跟组件中使用跟生命周期一样,只不过是用来捕获 路由组件的激活状态。

人话:就是被点击后展示当前组件时激活。

activated(){
    console.log('被激活了')
}

2、路由组件失活时触发 。

人话:就是不展示当前组件的时候就会触发

deactivated(){
    console.log('被失活了')
}

6、路由的导航守卫 

路由守卫的 to去哪里,from从哪来,next可以去。

1、全局前置守卫!--初始化的时候就被调用、每次路由切换前被调用

router.beforeEach((to, from, next)=>{
		//...
});

 2、全局后置守卫!--初始化的时候就被调用、每次路由切换前被调用,后置就没有next。

router.afterEach((to, from)=>{
		//...
});

3、独享路由守卫 只有前置没有后置 

{
		name:"xxx",
		path:"xxx",
		component:"xxx",
		//独享前置守卫
		beforeEnter:(to,from,next)=>{
			//...
		},
	}

 4、组件路由后卫

通过路由规则,进入该组件时被调用。

路由规则: 就是点击 router-link 或者this.$router.push()。

beforeRouteEnter(to,from,next){
    //通过路由规则,进入该组件时被调用路由规则 就是点击 router-link 或者this.$router.push()
},

通过路由规则,离开该组件时被调用。

路由规则: 就是点击 router-link 或者this.$router.push()。

beforeRouteLeave(to,from,next){
    //通过路由规则,离开该组件时被调用路由规则 就是点击 router-link 或者this.$router.push()
}


http://www.kler.cn/a/446477.html

相关文章:

  • 圣诞快乐(h5 css js(圣诞树))
  • 关于小程序内嵌h5打开新的小程序
  • K8s 节点 NotReady 后 Pod的变化
  • React:闭包陷阱产生和解决
  • Map.put 方法
  • JumpServer开源堡垒机搭建及使用
  • 2024年11月 蓝桥杯青少组 STEMA考试 Scratch真题
  • 12.13-12.21 刷题汇总
  • 活动预告|云原生创新论坛:知乎携手 AutoMQ、OceanBase、快猫星云的实践分享
  • 用SparkSQL和PySpark完成按时间字段顺序将字符串字段中的值组合在一起分组显示
  • mac 安装graalvm
  • 【Http,Netty,Socket,WebSocket的应用场景和区别】
  • CESS 出席华盛顿区块链政策峰会:参与国家安全与数据隐私保护专题讨论
  • BOE(京东方)“向新2025”年终媒体智享会首站落地上海 六大维度创新开启产业发展新篇章
  • 【HTML】DOCTYPE的作用?
  • SAP RESTful架构和OData协议
  • 微信小程序之今日热搜新闻
  • 【论文速读】| FirmRCA:面向 ARM 嵌入式固件的后模糊测试分析,并实现高效的基于事件的故障定位
  • 推送本地仓库到远程git仓库
  • 问题解决:发现Excel中的部分内容有问题。是否让我们尽量尝试恢复? 如果您信任此工作簿的源,请单击“是”。
  • 解析基于 SSM 框架 Vue 电脑测评系统:把握电脑测评精髓
  • Dash:数据可视化的未来之星
  • 【从零开始入门unity游戏开发之——C#篇23】C#面向对象继承——`as`类型转化和`is`类型检查、向上转型和向下转型、里氏替换原则(LSP)
  • 用bootstrap搭建侧边栏
  • uniapp新建项目hello,什么都没干提示应用未关联服务空间,请在uniCloud目录右键关联服务空间
  • Linux中部署项目