重温Vue-router
- 官方文档:router.vuejs.org/
一、配置
方式一
main.js中:
import Vue from 'vue' import Router from 'vue-router' import Hello from './components/Hello.vue'Vue.use(Router);const router=new Router({routes:[{path:'/hello',component:Hello}] });new Vue({router,render:h=>h(App), }).$mount('#app'); 复制代码
App.vue中:
<div id='app'><router-link to='/hello'></router-link><router-view></router-view> </div> 复制代码
方式二
router.js中:
import Vue from 'vue' import Router from 'vue-router' import Hello from './components/Hello.vue'Vue.use(Router);export default new Router({routes:[{path:'/hello',component:Hello}] }) 复制代码
main.js中:
import router from './router.js'new Vue({router,render: h => h(App), }).$mount('#app') 复制代码
App.vue中:
<div id='app'><router-link to='/hello'></router-link><router-view></router-view> </div> 复制代码
二、动态路由匹配
对于多个路径匹配同一个组件的情况(例如
User
组件显示的是不同用户的信息:/user/foo
和/user/bar
):new Router({routes:[{path:/user/:username',component:User}] }); 复制代码
在
User
组件中可以通过this.$route.params.username
获取到当前路径对应得的username
。从
/user/foo
切换到/user/bar
,User
组件不会重新渲染,因此需要通过watch
来监听://User.vue watch:{'$route'(to,from){console.log(to.params.username);} } 复制代码
或者使用
beforeRouteUpdate
://User.vue beforeRouteUpdate(to,from,next){console.log(to.params.username) } 复制代码
若同一个路径匹配了多个组件,则先定义的路由优先级更高:
//`/user`路径会指向User.vue export default new VueRouter({routes:[{path:'/user',component:User},{path:'/user',component:Admin}] }); 复制代码
三、嵌套路由
实现方式如下:
<!--App.vue-->
<router-view></router-view>
<!--User.vue-->
<router-view></router-view>
复制代码
export default new VueRouter({routes:[{//默认路径path:'/',component:Hello,children:[{path:'',component:Left}]},{path:'/hello',component:Hello,children:[{path:'',component:Left},{path:'left',component:Left},{path:'right',component:Right},]},{path:'/world',component:World}]
});
复制代码
四、用函数定向
this.$router.push()
- 参数可以是路径字符串(
router.push('home')
)、定位对象(router.push({path:'home'})
,router.push({name:'user',params:{userId:123}})
)。 - 若参数中有
path
字段,那么params
就会被忽略。params
只能和name
配合使用。 - 备选参数:
onCompelete
和onAbort
回调函数。 - 会在历史纪录中添加新纪录。
this.$router.replace
- 与push()类似。
- 区别在于,replace()不会在历史纪录中添加新纪录,而是替换到当前路由。
this.$router.go(n)
- 参数n是一个整数,代表前进或后退几步。
五、命名视图
可以设置多个
<router-view>
并用name
属性来区分它们:<!--App.vue--> <router-view class="a"></router-view> <router-view class="b" name="b"></router-view> <router-view class="c" name="c"></router-view> 复制代码
//router.js export default new Router({routes:[{path:'/',components:{default:'Foo',a:Bar,b:Baz}}] }); 复制代码
可以和嵌套路由组合使用。
六、重定向和别名
重定向
//router.js
export default new Router({routes:[{path:'/a',redirect:'/b'},//↓配合命名路由使用↓{path:'/c',redirect:{name:'d'}},//↓动态重定向↓{path:'/e',redirect:to=>{//接受目标路由作为参数//返回重定向的路径}}]
});
复制代码
别名
//router.js
routes:[{path:'/a',component:A,alias:'/b'}
]
复制代码
当你访问/b
,实际匹配到A组件,但url中还是/b
。
Props
通过个组件设置
props:[]
,可以实现传递数据。<!--Compo.vue--> <template><p>{{propName}}</p> </template> <script>export default{name:'Compo',props:['propName']} </script> 复制代码
//router.js export default new Router({routes:[{path:'/compo/:propName',component:Compo,props:true},//↓命名视图情况下,要对每个视图设置props的值↓{path:'/compo/:propName',components:{default:Compo,sideBar:Sid},props:{default:true,sideBar:false}}] }) 复制代码
当
props
的值为true
,this.$router.params
就是要传入组件的数据。当
props
是一个对象,那它就会作为组件的props传入。也可以用一个函数,把相关数据return给
props
。
History模式
vue-router默认是Hash模式:使用URL的hash模拟完整的链接。
也可以使用history模式,这样URL中就不带
/#
了。//router.js export default new Router({mode:'history',routes:[...] }); 复制代码
-history模式需要后端的设置来配合(若URL匹配不到任何静态资源,就返回index.html
,即依赖页面),否则用户直接在浏览器地址栏输入相应的URL就会报404。但这样,需要404页面时也不会出现了,所以:
export default new Router({mode: 'history',routes: [{ path: '*', component: NotFoundComponent }]
})
复制代码
重温Vue-router相关推荐
- vue router 入门笔记
vue router 入门笔记 tips: components优先级大于component,即当一个route对象里同时配置了component和components时component视为无效 即 ...
- 你可能不清楚的 Vue Router 深度用法(一)
Vue Router 简单易上手,能实现大部分的需求.但是,如果在项目里需要更细致的控制路由,以实现与其同步的效果,就需要挖掘其文档里没详细提及的内容.第一章为路由元信息用途挖掘. 路由元信息用途 ( ...
- vue router html,vue-router.html
Document Hello App! Go to Foo Go to Bar // 1. 定义(路由)组件. // 可以从其他文件 import 进来 const Foo = { template: ...
- Vue.js 从 Vue Router 0.7.x 迁移
从 Vue Router 0.7.x 迁移 只有 Vue Router 2 是与 Vue 2 相互兼容的,所以如果你更新了 Vue ,你也需要更新 Vue Router .这也是我们在主文档中将迁移路 ...
- 你可能不清楚的 Vue Router 深度用法(二)
此为 Vue Router 深度用法的第二篇,主要讲述动态路由匹配用法.第一篇的链接在此: https://segmentfault.com/a/11... 动态路由匹配是用于把某种模式匹配到的所有路 ...
- vue router html后缀,vue-router.html
Document Hello App! Go to Foo Go to Bar // 1. 定义(路由)组件. // 可以从其他文件 import 进来 const Foo = { template: ...
- vue require css html,requirejs vue vue.router简单框架
index.html 入口页面html> vue `menu`.`name` base.js requirejs 配置文件(function(){ requirejs.config({ ...
- Vue Router 4.0 正式发布!焕然一新。
关注若川视野,回复"pdf" 领取资料,回复"加群",可加群长期交流学习 12月8日,Vue Router 4 正式发布稳定版本. 在经历了 14 个 Alph ...
- vue router 参数_Vue.js项目开发技术解析
Vue.js项目开发技术解析 一.Vue.js实例 在一个Vue.js工程中,用于显示内容最基层的实例称之为根实例.通过该实例可以进行页面或组件的更新和显示.对于项目本身而言,无论是什么样的页面,都要 ...
- Vue Router的详细教程
Vue Router的详细教程 安装 #直接下载 / CDN https://unpkg.com/vue-router/dist/vue-router.js Unpkg.com 提供了基于 NPM 的 ...
最新文章
- 计算机网络导论 ppt,【2017年整理】1计算机网络导论.ppt
- Windbg学习 (0x0013) 扩展命令-SOS
- openoffice linux 目录,Linux之安装OpenOffice
- 【OkHttp】OkHttp Get 和 Post 请求 ( 同步 Get 请求 | 异步 Get 请求 | 同步 Post 请求 | 异步 Post 请求 )
- java访问器_Java中的访问器方法
- GRE核心词汇助记与精练-List10感觉,感情
- 0320-学习进度条
- 手机游戏赚钱到底有多难?接入运营商或需一年
- vue 生成发布包_Vue 3.0 终于正正正正正式发布了!
- 代数学笔记5: 群论(一)
- 24c04硬件地址位_硬件刷题篇(一)
- php mysql中华图书购物商城
- Nuget没办法使用了。
- 问题五十九:怎么求一元六次方程在区间内的所有不相等的实根(3)——修正一个问题
- 【渝粤教育】国家开放大学2018年春季 7138-22T人际交流与沟通 参考试题
- Java 创建xml文件和操作xml数据
- 电气自动化专业英文词汇及缩写
- android app上传
- 【答粉丝问】面试时,面试官说“谈谈你的缺点”时,该怎么回答?
- Hexo 搭建个人博客 基础配置及实操
热门文章
- 区块链:新经济蓝图及导读
- NOIP2010-普及组复赛模拟试题-第一题-手机
- jQuery validation插件的使用(转)
- 工程设计+算法规模化真的是AI突破吗?DeepMind唇读系统ICLR遭拒
- 临床研究和医疗保健行业实现数据湖架构的机会和挑战
- cmd系统命令不识别
- nginx、apach、php、mysql编译参数
- 转: The Code Commandments: Best Practices for Objective-C Coding (updated for ARC)
- 解禁策略组、注册表、各种应用程序、控制面板、运行、USB
- NETCF平台下利用XmlSerializer对于复杂类型序列化的探索(三)