router 路由

什么是路由:

        Vue Router 是 Vue.js 官方的路由管理器。它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌。路由实际上就是可以理解为指向,就是我在页面上点击一个按钮需要跳转到对应的页面,这就是路由跳转;

  routes:表示多个的集合才能为复数;即我们可以理解为多个路由的集合,JS中表示多种不同状态的集合的形式只有数组和对象两种,事实上官方定义routes是一个数组;所以我们记住了,routes表示多个数组的集合;是路由对象的集合 路由对象包含了页面的路由相关的所有的信息,一个路由其实是一个页面的跳转链接

  router:译为路由器,上面都是路由,这个是路由器,我们可以理解为一个容器包含上述两个或者说它是一个管理者,负责管理上述两个;举个常见的场景的例子:当用户在页面上点击按钮的时候,这个时候router就会去routes中去查找route,就是说路由器会去路由集合中找对应的路由;

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="../js/vue.js"></script>
    <script src="../js/vue-router.js"></script>
</head>
<body>
    <div id="app">
            <!-- 渲染路由组件的标签 -->
        <router-view></router-view>
    </div>
    <script>
        const com = {
            template: `
                <div>认识路由</div>
            `
        }
        // 实例化路由对象
        var router = new VueRouter({
            routes: [
                {
                    path: '/', // 页面链接的路径 '/'表示默认渲染的路由组件 路由地址和浏览器上的链接地址匹配上的时候会把组件替换掉 router-view
                    component: com
                }
            ]
        })
        var vm=new Vue({
           el:'#app',
           router,  //// 将路由的实例化对象和vue实例化对象关联起来
           data:{},
           methods:{}
        });
    </script>
</body>
</html>

饿了么路由实例:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
  <style>
    html,body{
      margin: 0;
      height: 100%;
    }
    #app {
      height: 100%;
    }
    .container{
      height: calc(100% - 50px);
      overflow: auto;
    }
    .nav_box{
      list-style: none;
      margin: 0;
      padding: 0;
      display: flex;
      justify-content: space-between;
      padding: 0 10px;
      align-items: center;
      height: 50px;
    }
    /* .active {
      color: red;
    } */
    .isActive {
      color: blue;
    }
  </style>
</head>
<body>
  <div id="app">
  
    <div class="container">
      <router-view></router-view>
    </div>
    <!-- 
      router-link是路由跳转的标签 它默认会转化成a标签 可以通过tag属性自定以标签
      to属性是跳转到的页面的路由对象或者path地址
      -->
    <ul class="nav_box">
    <!-- 
    active-class 
    是路由匹配到了当前路由就会添加他对应的值到class中
    他的默认值是router-link-active
    exact-active-class 是路由精确匹配 只有当前路由地址跟path的值完全相等的时候会将他的值添加进入class中
    他的默认值是router-link-exact-active
     -->
      <router-link tag="li" active-class="active" exact-active-class="isActive" to="/">首页</router-link>
      <router-link tag="li" active-class="active" exact-active-class="isActive" to="/discover">发现</router-link>
      <router-link tag="li" active-class="active" exact-active-class="isActive" to="/order">订单</router-link>
      <router-link tag="li" active-class="active" exact-active-class="isActive" to="/profile">我的</router-link>
    </ul>
  </div>
  <script src="./js/vue.js"></script>
  <script src="./js/vue-router.js"></script>
  <script>
    var Index = {
      template: `
        <div>首页</div>
      `
    }
    var Discover = {
       template: `
        <div>发现</div>
      `
    }
    var Order = {
      template: `
        <div>订单</div>
      `
    }
    var Profile = {
       template: `
        <div>我的</div>
      `
    }
    const routes = [
      {
        path: '/',
        component: Index
      },
      {
        path: '/discover',
        component: Discover
      },
      {
        path: '/discover/order',
        component: Order
      },
      {
        path: '/profile',
        component: Profile
      }
    ]
    let router = new VueRouter({
      routes
    })
    new Vue({
      el: "#app",
      router,
      data: {}
    })
  </script>
</body>
</html>

小米商城路由分析:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="../js/vue.js"></script>
    <script src="../js/vue-router.js"></script>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        html , body {
            height: 100%;
            margin: 0;
        }
        #app , #nav_com {
            height: 100%;
        }
        .content {
            height: calc(100% - 40px);
        }
        .tab_list {
            list-style: none;
            margin: 0;
            padding: 0;
            display: flex;
            justify-content: space-around;
            align-items: center;
            height: 40px;
            overflow: auto;
        }
        .active {
            color: #ff6700
        }
    </style>
</head>
<body>
    <div id="app">
        <router-view></router-view>
    </div>
    <script>
        const com_nav = {
            template: `
                <div id="nav_com">
                    <div class="content">
                        <router-view></router-view>
                    </div>
                    <div>
                        <ul class="tab_list">
                            <router-link tag="li" to="/index" exact-active-class="active">首页</router-link>
                            <router-link tag="li" to="/types" exact-active-class="active">分类</router-link>
                            <router-link tag="li" to="/start" exact-active-class="active">星球</router-link>
                            <router-link tag="li" to="/car" exact-active-class="active">购物车</router-link>
                            <router-link tag="li" to="/profile" exact-active-class="active">我的</router-link>
                        </ul>
                    </div>
                </div>
            `
        }

        // 定义组件
        const vip = {
            template: `
                <div>这是会员中心
                    <router-link tag="li" to="/index">返回首页</router-link>
                </div>
            `
        }
        const Index = {
            template: `
                <div>这是首页</div>
            `
        }
        const Type = {
            template: `
                <div>这是分类</div>
            `
        } 
        const Start = {
            template: `
                <div>这是星球</div>
            `
        }
        const Car = {
            template: `
                <div>这是购物车</div>
            `
        }
        const Profile = {
            template: `
                <div>
                    <p>这是我的</p>
                    <p>
                        <router-link tag="li" to="/vip">会员中心</router-link>
                    </p>
                </div>
            `
        }

        const routes = [
            {
                path: '/',
                component: com_nav,
                redirect: '/index',  //redirect: 路由路径重定向
                children: [  // children是路由的子路由 它里面是子路由的路由对象集合
                    {
                        path: 'index',
                        component: Index
                    },
                    {
                        path:'types',
                        component: Type
                    },
                    {
                        path:'start',
                        component: Start
                    },
                    {
                        path:'car',
                        component: Car
                    },
                    {
                        path:'profile',
                        component: Profile
                    }
                ]
            },
            {
                path: '/vip',
                component: vip
            }
        ]
        let router = new VueRouter({
            routes
        })
        var vm=new Vue({
           el:'#app',
           router,
           data:{},
           methods:{}
        });
    </script>
</body>

</html>

### Vue.js 路由实现方法及推荐的路由管理工具 Vue.js 中实现路由跳转的核心方式是通过官方提供的路由管理插件 `vue-router`。该插件支持将 URL 映射到不同的组件,从而实现在单页应用中动态加载视图并保持状态[^1]。开发者可以定义路由规则,并通过编程或声明式的方式进行页面导航。 #### 安装与配置 在 Vue 项目中集成 `vue-router` 需要先安装该库并通过 `createRouter` 创建一个路由实例。通常使用 `createWebHistory` 来启用 HTML5 History 模式的路由功能。以下是一个基本的配置示例: ```javascript import { createRouter, createWebHistory } from 'vue-router' import routes from './routes' // 路由表 const router = createRouter({ history: createWebHistory(), routes }) export default router ``` 创建完成后,需要将此路由实例挂载到 Vue 应用中,以确保整个应用程序能够识别并响应路由变化[^1]。 #### 声明式导航 最常用的声明式导航方式是使用 `<router-link>` 组件来生成带有正确链接行为的锚点元素。它会自动处理当前激活路径下的样式高亮问题: ```html <router-link to="/home">首页</router-link> ``` 此外,可以通过命名路由和参数传递来构建更复杂的链接结构: ```html <router-link :to="{ name: 'User', params: { id: 123 }}">用户详情</router-link> ``` #### 编程式导航 对于需要通过事件触发(如按钮点击)的场景,则可采用编程方式进行导航操作。例如,在方法内部调用 `$router.push` 实现跳转: ```javascript methods: { goToUser(id) { this.$router.push({ name: 'User', params: { id: id } }) } } ``` 这种方式允许根据业务逻辑灵活控制页面流转过程[^2]。 #### 动态路由匹配 为了满足类似 `/user/:id` 这样的路径需求,`vue-router` 提供了参数化路由定义机制。当访问具体路径时,这些参数会被解析为对象并可通过 `$route.params` 获取: ```javascript { path: '/user/:id', name: 'UserProfile', component: () => import('../views/UserProfile.vue') } ``` #### 嵌套路由 对于具有父子层级关系的界面设计,可以通过嵌套子路由来组织 URL 结构。每个父级路由可以通过 `children` 字段关联一组子路由规则: ```javascript { path: '/dashboard', name: 'Dashboard', component: DashboardLayout, children: [ { path: 'overview', component: OverviewPage }, { path: 'settings', component: SettingsPage } ] } ``` #### 懒加载与代码分割 提高首屏加载性能的一个有效手段是按需加载组件。借助 Webpack 的异步导入语法,可以在定义路由时轻松实现懒加载功能: ```javascript { path: '/about', name: 'About', component: () => import('../views/About.vue') } ``` 这样只有当用户访问对应路径时才会下载相关资源,显著减少了初始加载时间。 综上所述,`vue-router` 是目前最流行且功能强大的 Vue 路由解决方案之一,广泛应用于各类大型企业级项目中,支持从基础到高级的各种路由管理需求。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值