vue路由router的基本使用及路由跳转的方式

news/2024/7/10 3:19:24 标签: vue.js, node.js, javascript, vue

一、路由与路由器 

路由(route):路径和组件的匹配;

路由器(router):管理这些匹配规则的一个管理者; 

vue-router的理解

vue的⼀个插件库,专⻔⽤来实现SPA应⽤

对SPA应⽤的理解

1. 单⻚⾯web应⽤(single page web application,SPA)

2. 整个应⽤只有⼀个完整的⻚⾯

3. 点击⻚⾯中的导航链接不会刷新⻚⾯,只会做⻚⾯的局部更新

4. 数据需要通过ajax请求获取 路由的理解

1. 什么是路由?

⼀个路由就是⼀组映射关系(key-value),key为路径,value为component(⽤于展示⻚⾯内容)

⼯作过程:当浏览器的路径改变时,对应的组件就会显示

 二、路由的基本使用

  • 1. 安装路由vue-router,npm install vue-router
  • 2. 应⽤插件:Vue.use(VueRouter)
// 安装路由之后,在main.js引入路由器
import VueRouter from 'vue-router'
// 注册全局使用
Vue.use(VueRouter)
  • 3. 编写router配置项

 编写router文件夹里的index.js文件:

// 引入路由
import VueRouter from 'vue-router'
// 引入组件
import Home from '../components/Home.vue'
import About from '../components/About.vue'

// 创建router实例对象,让他去管理我们对应的关系
const router=new VueRouter({
  // vue-router 默认 hash 模式  当使⽤ history 模式时,URL 就像正常的 url。url去掉了#
  mode:'history',
  routes:[
  {
    path:'/home',//路径
    component:Home,//组件
    //好处和坏处:当一个路由出现问题的时候,会自动重定向到另外一个路由上去,保证你的数据畅通。 
   坏处:可能会出现一定的延时,造成网速变慢。但是一切都是由路由器的路由表自动控制的。
  //路由重定向指的是:用户在访问地址A的时候,强制用户跳转到地址B,从而在展示特定的组件页面(相当于 
  在点击跳转一个页面的时候设置一个默认显示的内容区域)
  //通过路由规则的redirect 属性,指定一个新的路由地址,可以很方便地设置路由的重定向
  redirect: '/About',//路由重定向,
  },
  {
    path:'/About',
    component:About,
  },
  {
    path:"/views/test",
    component:()=>import('../views/test.vue'),//注册组件的另一种写法,不需要导出名字
    children:[{
      // '/'开始就是从根路由开始,如果开始不带'/',则从当前路由开始。
      path:"test2",
      component:()=>import('../views/test2.vue'),//
    }]
  },
]
})
//暴露router  导出
export default router

main.js:(在main.js引入上面写的路由配置)

// 引入写的路由路径
import router from './router/index'

Vue.config.productionTip = false

new Vue({
  render: h => h(App),
  // 注册路径
  router,
}).$mount('#app')

 在APP.vue使用路由转跳(使用方案一进行转跳):(注意:要完成路由的基本配置才能进行路由的转跳)

<!-- 用于路径跳转  根据路径实现跳转-->
    <router-link to="/home">home</router-link><br>
    <router-link to="/About">about</router-link><hr>
    <router-link to="/views/test">test
   
    </router-link> <router-link to="/test2">test2</router-link>
    <!-- 容器 告诉vue将通过路径拿到的组件放到哪里去 , 用于显示路径里的组件的内容-->
    <router-view></router-view>

三、路由跳转的方式

方案一:声明式导航router-link

不带参数:

// 注意:router-link中链接如果是'/'开始就是从根路由开始,如果开始不带'/',则从当前路由开始。
<router-link :to="{name:'home'}">  
<router-link :to="{path:'/home'}"> //name,path都行, 建议用name 
//对象写法要动态绑定,也可以不用对象写法。  路径是对应路由的配置
<router-link to="/home">//不能动态绑定

带参数:

<router-link :to="{name:'home', params: {id:1}}">
<router-link :to="{name:'home', query: {id:1}}">  
<router-link :to="/home/:id">  
//传递对象
<router-link :to="{name:'detail', query: {item:JSON.stringify(obj)}}"></router-link>

name方式与 path方式的区别:

<router-link :to="{path:'/home/message/details',query:{id:m.id}}">查看详情</router-link>
<!-- name 路由的简化写法,不用写/路径,在路由配置文件路径那使用name,这里直接使用name属性,更便捷 -->
<router-link :to="{name:'xxx',query:{id:m.id}}">查看详情</router-link>

 方案二:编程式导航 this.$router.push()

2.1不带参数:

this.$router.push('/home')
this.$router.push({name:'home'})
this.$router.push({path:'/home'})

2.2 query传参:

1.在路由文件配置 路由配置:
name: 'home',
path: '/home'
2.跳转:
this.$router.push({name:'home',query: {id:'1'}})
this.$router.push({path:'/home',query: {id:'1'}})
3.在转跳到的页面接收获取参数
html取参: $route.query.id
script取参: this.$route.query.id

2.3 params传参:

1.路由配置:
name: 'home',
path: '/home/:id'(或者path: '/home:id')  注意:与上面query不同
2.跳转:
this.$router.push({name:'home',params: {id:'1'}})
注意:
// 只能用 name匹配路由不能用path
// params传参数(类似post)  路由配置 path: "/home/:id" 或者 path: "/home:id"否则刷新参数消失
3.在转跳到的页面接收获取参数
html取参:$route.params.id 
script取参:this.$route.params.id

2.4 直接通过path传参:

1.路由配置:
name: 'home',
path: '/home/:id'
2.跳转:
this.$router.push({path:'/home/123'}) 
或者:
this.$router.push('/home/123') 
3.在转跳到的页面接收获取参数:
this.$route.params.id

2.5 params和query的区别

query类似 get,跳转之后页面 url后面会拼接参数,类似?id=1。
非重要性的可以这样传,密码之类还是用params,刷新页面id还在。
params类似 post,跳转之后页面 url后面不会拼接参数。

query 传参配置的是path,而params传参配置的是name,在params中配置path无效
query在路由配置不需要设置参数,而params必须设置
query传递的参数会显示在地址栏中
params传参刷新会无效,但是query会保存传递过来的值,刷新不变 ; 

params: 参数不会显示在url地址上,刷新页面参数会消失,不能和path合作传参
query:参数会显示在url地址上,刷新页面不会消失 能和name以及path合作传递参数
 

方案三 this.$router.go(n)

向前或者向后跳转n个页面,n可为正整数或负整数

方案四 this.$router.replace

说明:跳转到指定URL,替换history栈中最后一个记录,点击后退会返回至上上一个页面

跟 router.push 很像,唯⼀的不同就是,它不会向 history 添加新记录,⽽是跟它的⽅法名⼀样 —— 替换掉 当前的 history 记录。(与window.location.replace('index.html')原理一样)

this.$router.replace({ name:'about', params:{ id:666 } })

其他方式

this.$router.forward() //前进

this.$router.back() //后退

总结:

1.query可以用namepath匹配路由,通过this.$route.query.id获取参数,刷新浏览器参数不会丢失
2.params只能用name匹配路由,通过path匹配路由获取不到参数,对应的路由配置path:'/home/:id'或者path:'home:id',否则刷新浏览器参数丢失
3.直接通过url传参,push({path: '/home/123'})或者push('/home/123'),对应的路由配置path:'/home/:id',刷新浏览器参数不会丢失


http://www.niftyadmin.cn/n/553154.html

相关文章

C#属性标记Order执行顺序备忘录

部分Attribute有实现IOrderedFilter&#xff0c;其执行顺序机制例子&#xff1a; /// <summary> /// 密码修改 /// </summary> /// <param name"password">密码</param> /// <param name"confirmPassword">确认密码</par…

web前端性能优化方案

回流、重绘会影响网络性能优化 回流: 当render树中的一部分或者全部因为大小边距等问题发生改变而需要重建的过程叫做回流 ( 几何大小和位置发生改变 )重绘: 当元素的一部分属性发生变化&#xff0c;如外观背景色不会引起布局变化而需要重新渲染的过程叫做重绘 ( 文字、边框、…

centos搭建cdh之ssh免密

笔者电脑配置(虚拟机): CDH1(主机): CDH2: 任务一:两台机器配置免密登录 说明:两台机器都使用NAT模式联网 首先确定机器能否联网: 如图:能够联网 按ctrl和C退出 如果不能就查看网络设置是否和虚拟机的一致: 不一样的话手动更改一下; 如果两台机器能够ping通(联网)的话: 接着就是…

VueX(Vue状态管理模式)

vuex是什么&#xff1f; 使用 props、事件等常用的父子组件的组件间通信方法&#xff0c;或者是通过事件总线来进行任意两个组件的通信。但是当应用逐渐复杂后&#xff0c;问题就开始出现了&#xff0c;这样的通信方式会导致数据流异常地混乱。 Vuex 是一个专为 Vue.js 应用程…

最近面试被问到一个问题,AtomicInteger如何保证线程安全?

最近面试被问到一个问题&#xff0c;AtomicInteger如何保证线程安全&#xff1f;我查阅了资料 发现还可以引申到 乐观锁/悲观锁的概念&#xff0c;觉得值得一记。 众所周知&#xff0c;JDK提供了AtomicInteger保证对数字的操作是线程安全的&#xff0c;线程安全我首先想到了syn…

HTTP状态码及其含义

HTTP状态码及其含义 1XX&#xff1a;信息状态码 100 Continue 继续&#xff0c;一般在发送post请求时&#xff0c;已发送了http header之后服务端将返回此信息&#xff0c;表示确认&#xff0c;之后发送具体参数信息2XX&#xff1a;成功状态码 200 OK 正常返回信息201 Created…

代码大全阅读笔记05

接下来我阅读的是第十一章——变量名的力量 首先该章的重要内容如下&#xff1a; 好的变量名是提高程序可读性的一项关键要素。对特殊种类的变量&#xff0c;比如循环下表和状态变量&#xff0c;需要加以特殊的考虑 名字要尽可能的具体。那些台模糊或者太通用…

Vue3通过Proxy实现双向数据绑定

1.什么是Proxy&#xff1f;它的作用是&#xff1f; Proxy可以理解成&#xff0c;在目标对象之前架设一层 "拦截"&#xff0c;当外界对该对象访问的时候&#xff0c;都必须经过这层拦截&#xff0c;而Proxy就充当了这种机制&#xff0c;类似于代理的含义&#xff0c;…