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

一、vue-router命名路由

1.什么是命名路由

给路由规则起一个别名,即为 “命名路由”

const router = new VueRouter({
    routes: [
       {
        path: '访问路径',
        // 别名代表当前路由规则,即 {} 内定义的路由规则
        name: '组件别名',
        component: 组件名
        }
    ]
})



<router-link :to="{ name: '组件别名', params: { 参数列表 }}">组件名</router-link>

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">
    <!--通过 to 标签 中的 params 传递值-->
    <router-link :to="{ name: 'user', params: {id: 1, my_name: '小强'} }">User组件</router-link>

    <!-- 路由占位符 -->
    <router-view></router-view>
</div>

<script>
    const User = {
        props: ['id', 'my_name'],
        template: '<h1>用户id为: {{id}} -- 姓名为:{{my_name}}</h1>'
    }

    // 创建路由实例对象
    const router = new VueRouter({
        // 所有的路由规则
        routes: [
            {
                // 命名路由
                name: 'user',
                path: '/user',
                component: User,

                // 通过 route.params 获取传递来的值
                props: route => ({ my_name: route.params.my_name, id: route.params.id})
            }
        ]
    })

    // 创建 vm 实例对象
    const vm = new Vue({
        // 指定控制的区域
        el: '#app',
        data: {},
        // 挂载路由实例对象
        // router: router
        router
    })
</script>
</body>
</html>

二、编程式导航

  • this.$router.push('hash地址') ===> 跳转页面
  • this.$router.go(n) ===> 前进/后退 页面
// 字符串(路径名称)
router.push('/home')

// 对象
router.push({ path: '/home' })

// 命名的路由(传递参数)
router.push({ name: '/user', params: { userId: 123 }})

// 带查询参数,变成 /register?name=xiaohong
router.push({ path: '/register', query: { name: 'xiaohong' }})

示例代码

<!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="{ name: 'user', params: {id: 1, my_name: '小珍'} }">User3</router-link>
    <router-link to="/admin">管理界面</router-link>
    <!-- 路由占位符 -->
    <router-view></router-view>
</div>

<script>
    const User = {
        props: ['id', 'my_name'],
        template: `
            <div>
                <h1>用户id为: {{id}} -- 姓名为:{{my_name}}</h1>
                <button @click="goAdmin">跳转到管理界面</button>
            </div>`,
        methods: {
            goAdmin() {
                // 跳转指定页面
                this.$router.push('/admin')
            }
        },
    }

    const Admin = {
        template: `
            <div>
                <h1>管理界面</h1>
                <button @click="goBack">后退</button>
            </div>`,
        methods: {
            goBack() {
                // 回退到上一个路由导航页面
                // go函数传正数,则代表前进 n 步,传负数,则代表后退 n 步
                this.$router.go(-1)
            }
        },
    }

    const router = new VueRouter({
        routes: [
            {
                name: 'user',
                path: '/user',
                component: User,
                // 在路由中利用函数传参
                props: route => ({my_name: route.params.my_name, id: route.params.id})
            },
            {
                path: '/admin',
                component: Admin
            }
        ]
    })

    const vm = new Vue({
        el: '#app',
        data: {},
        router
    })
</script>
</body>
</html>
作者:蓝月

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

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

原文地址:https://www.cnblogs.com/viplanyue/p/13573717.html