• Web全栈探索,Vue基础系列,前端路由(三)


    一、动态路由

    1.作用

    通过动态路由参数的模式进行路由匹配

    2.定义与使用

    let router = new VueRouter({
        routes: [
        // 动态路径参数 以冒号开头
        { path: '/公共路径名/:[变化参数]', component: [组件名] }
        ]
    })
    const 组件名 = {
        // 路由组件中通过$route.params获取路由参数
        template: '<div>组件名 {{ $route.params.[参数名] }}</div>'
    }

    3.示例代码

    <!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>
        <!-- 导入 vue 文件 -->
        <script src="../../js/vue.js"></script>
        <script src="../../js/vue-router.js"></script>
    </head>
    <body>
    <!-- 被 vm 实例所控制的区域 -->
    <div id="app">
        <router-link to="/user/1">User1</router-link>
        <router-link to="/user/2">User2</router-link>
        <router-link to="/user/3">User3</router-link>
    
        <!-- 路由占位符 -->
        <router-view></router-view>
    </div>
    
    <script>
        const User = {
            // 属性名与后面路由规则中的参数一致(:后面的属性名)
            // 使用 $route.params 变量访问指定组件
            template: '<h1>用户id为: {{$route.params.id}}</h1>'
        }
    
        // 创建路由实例对象
        const router = new VueRouter({
            // 所有的路由规则
            routes: [
                // 默认主页
                // path 中的 :id,其中 : 代表后面跟的参数是变量,变量名可以自定义,但是在模板中引用的时候需要写对应的属性名
                { path: '/user/:id', component: User }
            ]
        })
    
        // 创建 vm 实例对象
        const vm = new Vue({
            // 指定控制的区域
            el: '#app',
            data: {},
            // 挂载路由实例对象
            // router: router
            router
        })
    </script>
    </body>
    </html>
    

    二、路由传参(单值变量类型)

    1.方法

    设置 props 的值为布尔类型,以开启 props 传值

    const router = new VueRouter({
        routes: [
            // 如果 props 被设置为 true, route.params 将会被设置为组件属性
            { path: '/user/:[属性名]', component: User, props: true }
        ]
    })
    
    const User = {
        // 使用 props 接收路由参数
        props: ['[属性名]'], 
        // 使用路由参数
        template: '<div>用户ID: {{ [属性名] }}</div>'
    }
    

    2.示例代码

    <!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>
    
        <!-- 导入 vue 文件 -->
        <script src="../../js/vue.js"></script>
        <script src="../../js/vue-router.js"></script>
    </head>
    <body>
    
    <!-- 被 vm 实例所控制的区域 -->
    <div id="app">
        <router-link to="/user/1">User1</router-link>
        <router-link to="/user/2">User2</router-link>
        <router-link to="/user/3">User3</router-link>
    
        <!-- 路由占位符 -->
        <router-view></router-view>
    </div>
    
    <script>
        const User = {
            // 指定传递数据的变量名
            props: ['id'],
            template: '<h1>用户id为: {{id}}</h1>'
        }
    
        // 创建路由实例对象
        const router = new VueRouter({
            // 所有的路由规则
            routes: [
                // :id 中的 id 与上面的 props 中的变量名对应
                {path: '/user/:id', component: User, props: true}
            ]
        })
    
        // 创建 vm 实例对象
        const vm = new Vue({
            // 指定控制的区域
            el: '#app',
            data: {},
            // 挂载路由实例对象
            // router: router
            router
        })
    </script>
    </body>
    </html>
    

    三、路由传参(对象类型)

    const router = new VueRouter({
        routes: [
            { path: '/user', component: User, props: { 参数1名称: '参数1值',  参数2名称: '参数2值', ...... }}
        ]
    })
    
    const User = {
        props: ['参数1名称', '参数2名称', ......],
        template: ‘<div>{{ 参数1名称, 参数2名称, ...}}</div>'
    }
    <!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>
    
        <!-- 导入 vue 文件 -->
        <script src="../../js/vue.js"></script>
        <script src="../../js/vue-router.js"></script>
    </head>
    <body>
    <!-- 被 vm 实例所控制的区域 -->
    <div id="app">
        <router-link to="/user">User</router-link>
    
        <!-- 路由占位符 -->
        <router-view></router-view>
    </div>
    
    <script>
        const User = {
            props: ['my_name', 'my_age'],
            template: '<h1>姓名为:{{my_name}} --- 年龄为:{{my_age}}</h1>'
        }
    
        // 创建路由实例对象
        const router = new VueRouter({
            // 所有的路由规则
            routes: [
                // 使用 props 传递对象类型数据
                {path: '/user', component: User, props: {my_name: '小红', my_age: 20}}
            ]
        })
    
        // 创建 vm 实例对象
        const vm = new Vue({
            // 指定控制的区域
            el: '#app',
            data: {},
            // 挂载路由实例对象
            // router: router
            router
        })
    </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>
    
        <!-- 导入 vue 文件 -->
        <script src="../../js/vue.js"></script>
        <script src="../../js/vue-router.js"></script>
    </head>
    <body>
    <!-- 被 vm 实例所控制的区域 -->
    <div id="app">
        <router-link to="/user/1">User1</router-link>
        <router-link to="/user/2">User2</router-link>
        <router-link to="/user/3">User3</router-link>
    
        <!-- 路由占位符 -->
        <router-view></router-view>
    </div>
    
    <script>
        const User = {
            props: ['my_name', 'my_age', 'nums'],
            template: '<h1>姓名为:{{my_name}} -- 年龄为:{{my_age}} -- 组件序号为: {{nums}}</h1>'
        }
    
        // 创建路由实例对象
        const router = new VueRouter({
            // 所有的路由规则
            routes: [
                {
                    path: '/user/:nums_data',
                    component: User,
                    // 此处的 nums 参数可以直接使用 route.params 对象获取,而无需设置 props = true
                    props: route => ({my_name: '小张', my_age: 20, nums: route.params.nums_data})
                }
            ]
        })
    
        // 创建 vm 实例对象
        const vm = new Vue({
            // 指定控制的区域
            el: '#app',
            data: {},
            // 挂载路由实例对象
            // router: router
            router
        })
    </script>
    </body>
    </html>
    
    作者:蓝月

    -------------------------------------------

    个性签名:能我之人何其多,戒骄戒躁,脚踏实地地走好每一步

  • 相关阅读:
    动态发布接口
    高频访问IP弹验证码架构图 让被误伤的用户能及时自行解封的策略
    C/C++ Lua通信
    Mercurial
    goroutine chan 通道
    HotSpot VM
    # 释放内存 filter_res_q_l = filter_res_q_l[-2048:] filter_res_a_l = filter_res_a_l[-2048:]
    mongo 统计数据磁盘消耗
    不基于语义的基于字符串交集的字符串相似度比较
    拥塞控制 流量控制
  • 原文地址:https://www.cnblogs.com/viplanyue/p/13573718.html
Copyright © 2020-2023  润新知