资讯专栏INFORMATION COLUMN

Vue.js之路由系统

番茄西红柿 / 1418人阅读

摘要:生态之是什么是的路由系统,定位资源的,我们可以不进行整页刷新去切换页面内容。

Vue.js生态之vue-router

vue-router是什么?

vue-router是Vue的路由系统,定位资源的,我们可以不进行整页刷新去切换页面内容。

vue-router的安装与基本配置

vue-router.js 可以下载 也可以用cdn,基本配置信息看如下代码

</>复制代码

  1. // html 代码
  2. <div id="app">
  3. <div>
  4. <router-link to="/">首页router-link>
  5. <router-link to="/about">关于我们router-link>
  6. div>
  7. <div>
  8. <router-view>router-view>
  9. div>
  10. div>
  11. <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js">script>
  12. <script src="https://unpkg.com/vue-router/dist/vue-router.js">script>
  13. <script src="../js/router_demo.js">script>
  14. // js 代码
  15. var routes = [
  16. {
  17. path: "/",
  18. component: {
  19. template: `<div><h1>首页h1>div>`
  20. }
  21. },
  22. {
  23. path: "/about",
  24. component: {
  25. template: `<div><h1>关于我们h1>div>`
  26. }
  27. }
  28. ]
  29. var router = new VueRouter({
  30. routes: routes,
  31. // 路由去掉#
  32. // mode: history,
  33. });
  34. var app = new Vue({
  35. el: #app,
  36. router: router,
  37. });

路由的一些方法

路由传参以及获取参数~~

</>复制代码

  1. // html 代码
  2. <div id="app">
  3. <div>
  4. <router-link to="/">首页router-link>
  5. <router-link to="/about">关于我们router-link>
  6. <router-link to="/user/琴女?age=20">琴女router-link>
  7. <router-link to="/user/提莫">提莫router-link>
  8. div>
  9. <div>
  10. <router-view>router-view>
  11. div>
  12. div>
  13. // js 代码
  14. var routes = [
  15. {
  16. path: "/",
  17. component: {
  18. template: `<div><h1>首页h1>div>`
  19. }
  20. },
  21. {
  22. path: "/about",
  23. component: {
  24. template: `<div><h1>关于我们h1>div>`
  25. }
  26. },
  27. {
  28. path: "/user/:name",
  29. component: {
  30. template: `<div>
  31. <h1>我是:{{$route.params.name}}h1>
  32. <h1>我年龄是:{{$route.query.age}}h1>
  33. div>`,
  34. }
  35. }
  36. ]
  37. var router = new VueRouter({
  38. routes: routes,
  39. });
  40. var app = new Vue({
  41. el: #app,
  42. router: router,
  43. });

命名路由~  注意router-link里to一定要v-bind~~

</>复制代码

  1. <div id="app">
  2. <div>
  3. <router-link to="/">首页router-link>
  4. <router-link :to="{name: about}">关于我们router-link>
  5. <router-link to="/user/gaoxin?age=19">gaoxinrouter-link>
  6. div>
  7. <div>
  8. <router-view>router-view>
  9. div>
  10. div>
  11. // js代码
  12. let routes = [
  13. {
  14. path: /,
  15. component: {
  16. template: `<h1>这是主页h1>`
  17. }
  18. },
  19. {
  20. path: "/about",
  21. name: "about",
  22. component: {
  23. template: `<h1>关于我们h1>`
  24. }
  25. },
  26. {
  27. path: "/user/:name",
  28. component: {
  29. template: `<div>
  30. <h1>我是{{$route.params.name}}h1>
  31. <h2>我的年龄是{{$route.query.age}}h2>
  32. div>
  33. `
  34. }
  35. }
  36. ];
  37. let router = new VueRouter({
  38. routes: routes,
  39. mode: "history"
  40. });
  41. const app = new Vue({
  42. el: "#app",
  43. router: router,
  44. mounted(){
  45. console.log(this.$route)
  46. console.log(this.$router)
  47. }
  48. })

子路由

</>复制代码

  1. // 添加子路由变化的只有父级路由
  2. // 基于上面的例子增加
  3. // js 代码
  4. {
  5. path: "/user/:name",
  6. component: {
  7. template: `<div>
  8. <h1>我是:{{$route.params.name}}h1>
  9. <h1>我年龄是:{{$route.query.age}}h1>
  10. <router-link to="more" append>更多信息router-link>
  11. <router-view>router-view>
  12. div>`,
  13. },
  14. children: [
  15. {
  16. path: "more",
  17. component: {
  18. template: `<div>
  19. {{$route.params.name}}的详细信息
  20. div>`,
  21. }
  22. }
  23. ]
  24. },

 手动访问路由,以及传参~~

</>复制代码

  1. // 基于上面例子追加
  2. // html 代码
  3. <div id="app">
  4. <div>
  5. <router-link to="/">首页router-link>
  6. <router-link to="/about">关于我们router-link>
  7. <router-link to="/user/琴女?age=20">琴女router-link>
  8. <router-link to="/user/提莫">提莫router-link>
  9. // 添加一个button按钮
  10. <button @click="on_click">旅游button>
  11. div>
  12. <div>
  13. <router-view>router-view>
  14. div>
  15. div>
  16. // js 代码
  17. // 注意路由name的使用 这是在原例子追加
  18. var app = new Vue({
  19. el: #app,
  20. router: router,
  21. methods: {
  22. on_click: function () {
  23. setTimeout(function () {
  24. this.$router.push(/about)
  25. setTimeout(function () {
  26. this.$router.push({name: "user", params:{name: "琴女"},query:{age: 20}})
  27. }, 2000)
  28. }, 2000)
  29. }
  30. }
  31. });

命名路由视图 router-view

当我们只有一个的时候~所有内容都展示在这一个面板里面~

如果是content 和 footer 就需要同时显示并且不同区域~这就需要对视图进行命名~

命名视图路由

</>复制代码

  1. // html 代码
  2. <div id="app">
  3. <div>
  4. <router-link to="/">首页router-link>
  5. div>
  6. <div>
  7. <router-view name="content" class="content-view">router-view>
  8. <router-view name="footer" class="footer-view">router-view>
  9. div>
  10. div>
  11. // js 中的主要代码
  12. var routes = [
  13. {
  14. path: "/",
  15. components: {
  16. content: {
  17. template: `<div><h1>首页h1>div>`,
  18. },
  19. footer: {
  20. template: `<div><h1>关于我们h1>div>`,
  21. }
  22. }
  23. },
  24. ]

错误路由的重定向

</>复制代码

  1. let routes = [
  2. {
  3. path: "**",
  4. redirect: "/"
  5. }
  6. ]

$route以及$router的区别~~

  -- $route为当前router调转对象,里面可以获取name, path, query, params等~

  -- $router为VueRouter实例,有$router.push方法等~~

路由的钩子

路由的生命周期就是从一个路由跳转到另一路由整个过程,下面介绍两个钩子~

router.beforeEach()   router.afterEach()  详情请看代码

路由钩子

</>复制代码

  1. // html 代码
  2. <div id="app">
  3. <router-link to="/">首页router-link>
  4. <router-link to="/login">登录router-link>
  5. <router-link to="/user">用户管理router-link>
  6. <div>
  7. <router-view>router-view>
  8. div>
  9. div>
  10. // js 代码
  11. var routes = [
  12. {
  13. path: "/",
  14. component: {
  15. template: "<h1>首页h1>"
  16. }
  17. },
  18. {
  19. path: "/login",
  20. component: {
  21. template: "<h1>登录h1>"
  22. }
  23. },
  24. {
  25. path: "/user",
  26. component: {
  27. template: "<h1>用户管理h1>"
  28. }
  29. }
  30. ];
  31. var router = new VueRouter({
  32. routes: routes
  33. });
  34. router.beforeEach(function (to,from,next) {
  35. // console.log(to)
  36. // console.log(from)
  37. // console.log(next)
  38. // next(false)
  39. if(to.path=="/user"){
  40. next("/login")
  41. }
  42. else {
  43. next();
  44. }
  45. });
  46. router.afterEach(function (to, from) {
  47. console.log(to)
  48. console.log(from)
  49. });
  50. var app = new Vue({
  51. el: #app,
  52. router: router
  53. });

next参数配置

</>复制代码

  1. next:function 一定要调用这个方法来resolve这个钩子函数。
  2. 执行效果依赖next方法的调用参数
  3. next() 什么都不做继续执行到调转的路由
  4. next(false) 中断当前导航 没有跳转 也没有反应
  5. next("/") 参数是路径 调转到该路径
  6. next(error) 如果next参数是一个Error实例 导航终止该错误
  7. 会传递给router.onError()注册过的回调中

如果/user下面还有子路由的情况下会怎么样呢~????

</>复制代码

  1. // 匹配子路由 改一下匹配方法就可以~
  2. // js 改动代码
  3. router.beforeEach(function (to,from,next) {
  4. // console.log(to)
  5. // console.log(from)
  6. // console.log(next)
  7. // next(false)
  8. if(to.matched.some(function (item) {
  9. return item.path == "/post"
  10. })){
  11. next("/login")
  12. }
  13. else {
  14. next();
  15. }
  16. });
  17. // 元数据配置 改动代码
  18. // html 部分
  19. {
  20. path: "/user",
  21. meta: {
  22. required_login: true,
  23. },
  24. component: {
  25. template: `
  26. <div>
  27. <h1>用户管理h1>
  28. <router-link to="vip" append>viprouter-link>
  29. <router-view>router-view>
  30. div>
  31. `
  32. },
  33. children: [{
  34. path: "vip",
  35. meta: {
  36. required_login: true,
  37. },
  38. component: {
  39. template: <h1>VIPh1>
  40. }
  41. }]
  42. }
  43. // js 部分
  44. router.beforeEach(function (to,from,next) {
  45. // console.log(to)
  46. // console.log(from)
  47. // console.log(next)
  48. // next(false)
  49. if(to.meta.required_login){
  50. next("/login")
  51. }
  52. else {
  53. next();
  54. }
  55. });

 

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/1530.html

相关文章

  • 利用K8S技术栈打造个人私有云(连载:私有云客户端打造)

    摘要:前端技术栈还是非常庞大的,为了能够借助已经存在的轮子来造出一辆车,所以我选择了进行实践。状态的管理的状态管理依靠完成,用其来管理的所有组件状态。私有云客户端打造主页面首先是主页面,可以打开任何一个云主机系统的页面看,基本类似。 showImg(https://segmentfault.com/img/remote/1460000013930354); 【利用K8S技术栈打造个人私有...

    Jingbin_ 评论0 收藏0
  • 利用K8S技术栈打造个人私有云(连载:私有云客户端打造)

    摘要:前端技术栈还是非常庞大的,为了能够借助已经存在的轮子来造出一辆车,所以我选择了进行实践。状态的管理的状态管理依靠完成,用其来管理的所有组件状态。私有云客户端打造主页面首先是主页面,可以打开任何一个云主机系统的页面看,基本类似。 showImg(https://segmentfault.com/img/remote/1460000013930354); 【利用K8S技术栈打造个人私有...

    shiina 评论0 收藏0
  • Vue 2.x 实战后台管理系统开发(二)

    摘要:导语承接上文实战之后台管理系统开发一在上一篇文章中,我详细叙述了如何创建项目框架和引入各种后台常用插件,做好这些准备工作后,我们就可以着手进行页面的开发了。如果传入的数据不符合规格,会发出警告。 1. 导语 承接上文:Vue 2.x 实战之后台管理系统开发(一) 在上一篇文章中,我详细叙述了如何创建项目框架和引入各种后台常用插件,做好这些准备工作后,我们就可以着手进行页面的开发了。在开...

    Ilikewhite 评论0 收藏0
  • Vue学习笔记vue-cli项目搭建及解析

    摘要:样式通过标签包裹,默认是影响全局的,如需定义作用域只在该组件下起作用,需在标签上加,如要引入外部文件,首先需给项目安装依赖包,打开,进入项目目录,输入回车。 showImg(https://segmentfault.com/img/remote/1460000013235090); (一)安装node.js 首先需要安装node环境,可以直接到中文官网http://nodejs.cn/...

    Caizhenhao 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<