vue-router 实现跳转的方式
Posted shuijingcao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue-router 实现跳转的方式相关的知识,希望对你有一定的参考价值。
1、说一下vue中所有带$的方法
<div id="example"> <p ref="myp">{{msg}}</p> <div ref="warp"> <div v-for="a in arr" ref="mydiv">a</div>
</div> </div>
let vm = new Vue({ el:‘#example‘, data:{msg:‘hello‘,arr:[1,2,3]}, mounted(){ this.$nextTick(()=>{ console.log(vm); })
console.log(this.$refs.myp)//无论有多少个只能拿到一个
console.log(this.$refs.mydiv)//可以拿到一个数组
this.arr=[1,2,3,4]
console.log(this.$refs.wrap)
debugger //这里debugger的话只能看到warp打印出来的是有3个,因为dom渲染是异步的。所以如果数据变化后想获取真实的数据的话需要等页面渲染
完毕后在获取,就用$nextTick
} })
vm.$watch(‘msg‘, function (newValue, oldValue) { // 这个回调将在 `vm.msg` 改变后调用 })
//this.$data: vm上的数据
//this.$el:当前el元素
//this.$nextTick :异步方法,等待渲染dom完成后来获取vm
//this.$watch:监控
//this.$set:后加的属性实现响应式变化
//this.$refs:被用来给元素或子组件注册引用信息。引用信息将会注册在父组件的 $refs 对象上。如果在普通的 DOM 元素上使用,引用指向的就是 DOM 元素;如果用在子组件上,引用就指向组件实例
2、vue-router 除了router-link 怎么实现跳转?
1) router-link 实现方式
//1. 不带参数 <router-link :to="{name:‘home‘}"> <router-link :to="{path:‘/home‘}"> //name,path都行, 建议用name
//2.带参数
<router-link :to="{name:‘home‘, params: {id:1}}">
// params传参数 (类似post)
// 路由配置 path: "/home/:id" 或者 path: "/home:id"
// 不配置path ,第一次可请求,刷新页面id会消失
// 配置path,刷新页面id会保留
// html 取参 $route.params.id
// script 取参 this.$route.params.id
2) this.$router.push() (函数里面调用)
1. 不带参数 this.$router.push(‘/home‘) this.$router.push({name:‘home‘}) this.$router.push({path:‘/home‘}) 2. query传参 this.$router.push({name:‘home‘,query: {id:‘1‘}}) this.$router.push({path:‘/home‘,query: {id:‘1‘}}) // html 取参 $route.query.id // script 取参 this.$route.query.id 3. params传参 this.$router.push({name:‘home‘,params: {id:‘1‘}}) // 只能用 name // 路由配置 path: "/home/:id" 或者 path: "/home:id" , // 不配置path ,第一次可请求,刷新页面id会消失 // 配置path,刷新页面id会保留 // html 取参 $route.params.id // script 取参 this.$route.params.id 4. query和params区别 query类似 get, 跳转之后页面 url后面会拼接参数,类似?id=1, 非重要性的可以这样传, 密码之类还是用params刷新页面id还在 params类似 post, 跳转之后页面 url后面不会拼接参数 , 但是刷新页面id 会消失
3) this.$router.replace() (用法同上,push)
在vue.js中想要跳转到不同的 URL,需要使用 router.push 方法。这个方法会向 history 栈添加一个新的记录,当用户点击浏览器后退按钮时,则回到之前的 URL。
设置 replace 属性(默认值: false)的话,当点击时,会调用 router.replace() 而不是 router.push(),于是导航后不会留下 history 记录。即使点击返回按钮也不会回到这个页面。
4) this.$router.go(n) ()
this.$router.go(n) 向前或者向后跳转n个页面,n可为正整数或负整数
3、介绍单页应用和多页应用?
单页面应用(SinglePage Web Application,SPA)
只有一张Web页面的应用,是一种从Web服务器加载的富客户端,单页面跳转仅刷新局部资源 ,公共资源(js、css等)仅需加载一次,常用于PC端官网、购物等网站
如图:
多页面应用(MultiPage Application,MPA)
多页面跳转刷新所有资源,每个公共资源(js、css等)需选择性重新加载,常用于 app 或 客户端等
如图:
具体对比分析:
单页面应用(SinglePage Web Application,SPA) | 多页面应用(MultiPage Application,MPA) | |
---|---|---|
组成 | 一个外壳页面和多个页面片段组成 | 多个完整页面构成 |
资源共用(css,js) | 共用,只需在外壳部分加载 | 不共用,每个页面都需要加载 |
刷新方式 | 页面局部刷新或更改 | 整页刷新 |
url 模式 | a.com/#/pageone a.com/#/pagetwo |
a.com/pageone.html a.com/pagetwo.html |
用户体验 | 页面片段间的切换快,用户体验良好 | 页面切换加载缓慢,流畅度不够,用户体验比较差 |
转场动画 | 容易实现 | 无法实现 |
数据传递 | 容易 | 依赖 url传参、或者cookie 、localStorage等 |
搜索引擎优化(SEO) | 需要单独方案、实现较为困难、不利于SEO检索 可利用服务器端渲染(SSR)优化 | 实现方法简易 |
试用范围 | 高要求的体验度、追求界面流畅的应用 | 适用于追求高度支持搜索引擎的应用 |
开发成本 | 较高,常需借助专业的框架 | 较低 ,但页面重复代码多 |
维护成本 | 相对容易 | 相对复杂 |
以上是关于vue-router 实现跳转的方式的主要内容,如果未能解决你的问题,请参考以下文章
解决vue-router路由跳转的问题 message: "Navigating to current location ("/homePage") is not all