• 官方文档: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/barUser组件不会重新渲染,因此需要通过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配合使用。
  • 备选参数:onCompeleteonAbort回调函数。
  • 会在历史纪录中添加新纪录。

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的值为truethis.$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相关推荐

  1. vue router 入门笔记

    vue router 入门笔记 tips: components优先级大于component,即当一个route对象里同时配置了component和components时component视为无效 即 ...

  2. 你可能不清楚的 Vue Router 深度用法(一)

    Vue Router 简单易上手,能实现大部分的需求.但是,如果在项目里需要更细致的控制路由,以实现与其同步的效果,就需要挖掘其文档里没详细提及的内容.第一章为路由元信息用途挖掘. 路由元信息用途 ( ...

  3. vue router html,vue-router.html

    Document Hello App! Go to Foo Go to Bar // 1. 定义(路由)组件. // 可以从其他文件 import 进来 const Foo = { template: ...

  4. Vue.js 从 Vue Router 0.7.x 迁移

    从 Vue Router 0.7.x 迁移 只有 Vue Router 2 是与 Vue 2 相互兼容的,所以如果你更新了 Vue ,你也需要更新 Vue Router .这也是我们在主文档中将迁移路 ...

  5. 你可能不清楚的 Vue Router 深度用法(二)

    此为 Vue Router 深度用法的第二篇,主要讲述动态路由匹配用法.第一篇的链接在此: https://segmentfault.com/a/11... 动态路由匹配是用于把某种模式匹配到的所有路 ...

  6. vue router html后缀,vue-router.html

    Document Hello App! Go to Foo Go to Bar // 1. 定义(路由)组件. // 可以从其他文件 import 进来 const Foo = { template: ...

  7. vue require css html,requirejs vue vue.router简单框架

    index.html 入口页面html> vue `menu`.`name` base.js requirejs 配置文件(function(){    requirejs.config({   ...

  8. Vue Router 4.0 正式发布!焕然一新。

    关注若川视野,回复"pdf" 领取资料,回复"加群",可加群长期交流学习 12月8日,Vue Router 4 正式发布稳定版本. 在经历了 14 个 Alph ...

  9. vue router 参数_Vue.js项目开发技术解析

    Vue.js项目开发技术解析 一.Vue.js实例 在一个Vue.js工程中,用于显示内容最基层的实例称之为根实例.通过该实例可以进行页面或组件的更新和显示.对于项目本身而言,无论是什么样的页面,都要 ...

  10. Vue Router的详细教程

    Vue Router的详细教程 安装 #直接下载 / CDN https://unpkg.com/vue-router/dist/vue-router.js Unpkg.com 提供了基于 NPM 的 ...

最新文章

  1. 计算机网络导论 ppt,【2017年整理】1计算机网络导论.ppt
  2. Windbg学习 (0x0013) 扩展命令-SOS
  3. openoffice linux 目录,Linux之安装OpenOffice
  4. 【OkHttp】OkHttp Get 和 Post 请求 ( 同步 Get 请求 | 异步 Get 请求 | 同步 Post 请求 | 异步 Post 请求 )
  5. java访问器_Java中的访问器方法
  6. GRE核心词汇助记与精练-List10感觉,感情
  7. 0320-学习进度条
  8. 手机游戏赚钱到底有多难?接入运营商或需一年
  9. vue 生成发布包_Vue 3.0 终于正正正正正式发布了!
  10. 代数学笔记5: 群论(一)
  11. 24c04硬件地址位_硬件刷题篇(一)
  12. php mysql中华图书购物商城
  13. Nuget没办法使用了。
  14. 问题五十九:怎么求一元六次方程在区间内的所有不相等的实根(3)——修正一个问题
  15. 【渝粤教育】国家开放大学2018年春季 7138-22T人际交流与沟通 参考试题
  16. Java 创建xml文件和操作xml数据
  17. 电气自动化专业英文词汇及缩写
  18. android app上传
  19. 【答粉丝问】面试时,面试官说“谈谈你的缺点”时,该怎么回答?
  20. Hexo 搭建个人博客 基础配置及实操

热门文章

  1. 区块链:新经济蓝图及导读
  2. NOIP2010-普及组复赛模拟试题-第一题-手机
  3. jQuery validation插件的使用(转)
  4. 工程设计+算法规模化真的是AI突破吗?DeepMind唇读系统ICLR遭拒
  5. 临床研究和医疗保健行业实现数据湖架构的机会和挑战
  6. cmd系统命令不识别
  7. nginx、apach、php、mysql编译参数
  8. 转: The Code Commandments: Best Practices for Objective-C Coding (updated for ARC)
  9. 解禁策略组、注册表、各种应用程序、控制面板、运行、USB
  10. NETCF平台下利用XmlSerializer对于复杂类型序列化的探索(三)