• Vue.js之路由的使用


    本文主要介绍Vue.js中路由的使用。简而言之,路由是对应关系。分为前端路由和后端路由,前端路由通过事件的监听获取指定的内容,后端路由通过网址获取指定的内容。首先,本文会介绍前端路由的基本使用(未利用vue-router),后续会介绍vue-router的具体使用。

    1.基础案例引入

    基础案例主要通过hash地址变化的监听实现了简单的路由功能。

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>Documenttitle>
    8. head>
    9. <body>
    10. <div id="app">
    11. <a href="#index">主页a>
    12. <a href="#technology">科技a>
    13. <a href="#finance">财经a>
    14. <a href="#sports">体育a>
    15. <component :is="showPart">component>
    16. div>
    17. <script src="./vue.min.js">script>
    18. <script>
    19. // 定义组件
    20. const index = {
    21. template: '

      主页信息

      '
    22. };
    23. const technology = {
    24. template: '

      科技信息

      '
    25. };
    26. const finance = {
    27. template: '

      财经信息

      '
    28. };
    29. const sports = {
    30. template: '

      体育信息

      '
    31. };
    32. const vm = new Vue({
    33. el: '#app',
    34. data() {
    35. return {
    36. showPart: 'index'
    37. }
    38. },
    39. components: {
    40. technology,
    41. finance,
    42. index,
    43. sports
    44. }
    45. })
    46. window.onhashchange = function() {
    47. vm.showPart = location.hash.slice(1);
    48. }
    49. script>
    50. body>
    51. html>

    2.vue-router的基本使用

    下面介绍vue-router的使用方法:

    (1)页面标签构建

    router-link会被渲染为a链接,to对应的是href属性,默认会在前面添加一个“#”.router-view为占位符,用于显示跳转后得到的内容。

    1. <div id="app">
    2. <router-link to="/tech">科技router-link>
    3. <router-link to="/sports">体育router-link>
    4. <router-view>
    5. div>

     (2)定义组件

    组件中通过template定义显示的内容

    1. let tech = {
    2. template: '

      科技信息

      '
    3. };
    4. let sports = {
    5. template: `
    6. 体育信息


    7. basketball
    8. volleyball
  • `
  • };
  • let b = {
  • template: '

    basketball

    '
  • };
  • let v = {
  • template: '

    volleyball

    '
  • };
  •  (3)创建vue-router对象

    通过VueRouter创建实例化对象,利用routes可为不同组件设置指定的路径,同时可以利用重定向设置默认路径。注意:通过children可以添加子路由

    1. // 3.创建VueRounter实例化对象
    2. const selfRouter = new VueRouter({
    3. // redirect重定向,当访问的路径是“/”时,直接切换为“/tech路径。可用于设置默认显示内容
    4. routes: [{
    5. path: '/',
    6. redirect: '/tech'
    7. }, {
    8. path: '/sports',
    9. redirect: '/sports/basketball'
    10. }, {
    11. path: '/tech',
    12. component: tech
    13. }, {
    14. path: '/sports',
    15. component: sports,
    16. children: [{
    17. path: '/sports/basketball',
    18. component: b
    19. }, {
    20. path: '/sports/volleyball',
    21. component: v
    22. }]
    23. }]
    24. });

     (4)Vue中挂载路由

    在Vue实例中添加router,赋值为上面创建的router对象

    1. const vm = new Vue({
    2. el: '#app',
    3. data: function() {
    4. return {}
    5. },
    6. methods: {},
    7. router: selfRouter
    8. })

     完整代码如下:

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>Documenttitle>
    8. head>
    9. <body>
    10. <div id="app">
    11. <router-link to="/tech">科技router-link>
    12. <router-link to="/sports">体育router-link>
    13. <router-view>
    14. div>
    15. <script src="./vue.min.js">script>
    16. <script src="./vue-router.min.js">script>
    17. <script>
    18. // 2.定义组件
    19. let tech = {
    20. template: '

      科技信息

      '
    21. };
    22. let sports = {
    23. template: `
    24. 体育信息


    25. basketball
    26. volleyball
  • `
  • };
  • let b = {
  • template: '

    basketball

    '
  • };
  • let v = {
  • template: '

    volleyball

    '
  • };
  • // 3.创建VueRounter实例化对象
  • const selfRouter = new VueRouter({
  • // redirect重定向,当访问的路径是“/”时,直接切换为“/tech路径。可用于设置默认显示内容
  • routes: [{
  • path: '/',
  • redirect: '/tech'
  • }, {
  • path: '/sports',
  • redirect: '/sports/basketball'
  • }, {
  • path: '/tech',
  • component: tech
  • }, {
  • path: '/sports',
  • component: sports,
  • children: [{
  • path: '/sports/basketball',
  • component: b
  • }, {
  • path: '/sports/volleyball',
  • component: v
  • }]
  • }]
  • });
  • // 4.在Vue实例中挂载
  • const vm = new Vue({
  • el: '#app',
  • data: function() {
  • return {}
  • },
  • methods: {},
  • router: selfRouter
  • })
  • script>
  • body>
  • html>
  • 3.动态匹配路由

    (1)通过$route.params获取参数

    1. const userIndo = {
    2. template: `
      用户的ID值为{{$route.params.id}}
      `
    3. };
    4. let r = new VueRouter({
    5. routes: [{
    6. path: '/',
    7. redirect: '/user/1'
    8. }, {
    9. path: '/user/:id',
    10. component: userIndo
    11. }]
    12. });

     (2)利用props获取参数,props值为布尔类型

    1. const userIndo = {
    2. props: ['id'],
    3. template: `
      用户的ID值为{{id}}
      `
    4. };
    5. let r = new VueRouter({
    6. routes: [{
    7. path: '/',
    8. redirect: '/user/1'
    9. }, {
    10. path: '/user/:id',
    11. component: userIndo,
    12. props: true
    13. }]
    14. });

     (3)利用props获取参数,props值为对象类型 

    1. const userIndo = {
    2. props: ['uname', 'age'],
    3. template: `
      {{uname+'-'+age}}
      `
    4. };
    5. let r = new VueRouter({
    6. routes: [{
    7. path: '/',
    8. redirect: '/user/1'
    9. }, {
    10. path: '/user/:id',
    11. component: userIndo,
    12. props: {
    13. uname: '张三',
    14. age: 20
    15. }
    16. }]
    17. });

     (4) 利用props获取参数,props值为函数类型 

    1. const userIndo = {
    2. props: ['uname', 'age', 'id'],
    3. template: `
      {{uname+'-'+age+'-'+id}}
      `
    4. };
    5. let r = new VueRouter({
    6. routes: [{
    7. path: '/',
    8. redirect: '/user/1'
    9. }, {
    10. path: '/user/:id',
    11. component: userIndo,
    12. props: r => ({
    13. uname: '张三',
    14. age: 20,
    15. id: r.params.id
    16. })
    17. }]
    18. });

    最后一例的完整代码:

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>Documenttitle>
    8. head>
    9. <body>
    10. <div id="app">
    11. <router-link to="/user/1">用户1router-link>
    12. <router-link to="/user/2">用户2router-link>
    13. <router-link to="/user/3">用户3router-link>
    14. <router-link to="/user/4">用户4router-link>
    15. <router-link to="/user/5">用户5router-link>
    16. <router-view>router-view>
    17. div>
    18. <script src="./vue.min.js">script>
    19. <script src="./vue-router.min.js">script>
    20. <script>
    21. // 2.定义组件
    22. const userIndo = {
    23. props: ['uname', 'age', 'id'],
    24. template: `
      {{uname+'-'+age+'-'+id}}
      `
    25. };
    26. // 3.定义路由规则,设置重定向
    27. let r = new VueRouter({
    28. routes: [{
    29. path: '/',
    30. redirect: '/user/1'
    31. }, {
    32. path: '/user/:id',
    33. component: userIndo,
    34. props: r => ({
    35. uname: '张三',
    36. age: 20,
    37. id: r.params.id
    38. })
    39. }]
    40. });
    41. // 4.在Vue实例中挂载路由
    42. const vm = new Vue({
    43. el: '#app',
    44. data: function() {
    45. return {}
    46. },
    47. methods: {},
    48. router: r
    49. })
    50. script>
    51. body>
    52. html>

    4.vue-router的方法

    在介绍方法之前,首先介绍命名路由的使用。命名路由是给路由起了个名字(通过name属性),这样可以实现指定的跳转。

    (1)push方法

    通过参数传入跳转的数据

    (2)go方法

    前进后退功能,参数为1表示前进,参数为-1表示后退。

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>Documenttitle>
    8. head>
    9. <body>
    10. <div id="app">
    11. <router-link to="/user/1">用户1router-link>
    12. <router-link to="/user/2">用户2router-link>
    13. <router-link to="/user/3">用户3router-link>
    14. <router-link :to="targeted()">用户4router-link>
    15. <router-link to="/user/5">用户5router-link>
    16. <router-view>router-view>
    17. div>
    18. <script src="./vue.min.js">script>
    19. <script src="./vue-router.min.js">script>
    20. <script>
    21. const userIndo = {
    22. props: ['uname', 'age', 'id'],
    23. template: `
      {{uname+'-'+age+'-'+id}}
    24. `,
  • methods: {
  • jump() {
  • // 1.push('/user/5')
  • // 2.push({path: '/user/5'})
  • // 3.this.$router.push({
  • // name: 'user',
  • // params: {
  • // id: 123
  • // }
  • // })
  • // 4
  • this.$router.push({
  • path: 'user/5',
  • // 定义查询参数
  • query: {
  • uid: 123
  • }
  • })
  • }
  • }
  • };
  • let r = new VueRouter({
  • routes: [{
  • path: '/',
  • redirect: '/user/1'
  • }, {
  • name: 'user',
  • path: '/user/:id',
  • component: userIndo,
  • props: r => ({
  • uname: '张三',
  • age: 20,
  • id: r.params.id
  • })
  • }]
  • });
  • const vm = new Vue({
  • el: '#app',
  • data: function() {
  • return {}
  • },
  • methods: {
  • targeted() {
  • return {
  • name: 'user',
  • params: {
  • id: 123
  • }
  • }
  • }
  • },
  • router: r
  • })
  • script>
  • body>
  • html>
  • 相关阅读:
    javaEE - 1(9000字详解多线程第一篇)
    014python-内置函数
    Terraform 系列-什么是 IaC?
    陈宥维《虎鹤妖师录》“显眼包”太子成长记 表演灵动获好评
    Linux——网络配置
    结构体指针的引入
    中山市 香山杯2023 Misc pintu
    计算机网络复习总结5
    爬虫时如何利用BeautifulSoup获取我们需要的数据?
    Bellman-ford算法详解
  • 原文地址:https://blog.csdn.net/weixin_44827643/article/details/126007795