Vue3入门笔记----实现页面路由功能

这个系列的笔记重点会放在怎么样利用Vue3把项目架设起来并跟后端API互动,不会介绍Vue的基础特性,关于Vue的基础特性可以参考这个视频四个小时带你快速入门Vue,我是看这个入门的,觉得还不错。

代码地址: https://github.com/yexia553/vue_study/tree/%E9%85%8D%E7%BD%AEvue-router/vue3-notes

同步发表于个人站点: http://panzhixiang.cn/article/2022/11/10/60.html

完善页面路由

我们在Vue3 入门笔记 ---- 使用vue-router配置路由里面其实已经配置过页面路由了,但是功能很简单,只有一个main路由,用于让浏览器指向首页,但实际开发中肯定不会就只展示一个页面,不然也就不需要路由这个功能了。

我们需要哪些路由

我们再看一下之前的左侧菜单栏中的按钮,如下图,
vue3-router-demo
可以看出来有首页其他两个按钮,这两个按钮背后其实也就是对应着两个路由。
虽然实际项目中也不会就这两个按钮,但是实现上差不多,所以就用这两个来举例。

修改路由配置

Vue3 入门笔记 ---- 使用vue-router配置路由 中提到过,路由配置放在了src/router/index.js文件中了,我们需要在里面添加上面提到的首页其他这两个路由,添加之后文件内容如下,

import { createRouter, createWebHashHistory } from 'vue-router'


const routes = [
    {
        path: '/',
        name: 'main',
        redirect: '/home',   // 用于重定向,
        component: () => import('../views/Main.vue'),
        children: [
            {
                path: '/home',
                name: 'home',
                component: () => import('../views/home/Home.vue'),
            },
            {
                path: '/other',
                name: 'other',
                component: () => import('../views/other/Other.vue'),
            },
        ]
    },
]

const router = createRouter({
    history: createWebHashHistory(),
    routes
})

export default router

上面这段代码中的第8行redirect: '/home' 是用来重定向的,当路由指向“/main”的时候重定向到“/home”,因为/main这个路由实际上只是我们写代码用来封装组件的时候需要,访问页面的人是不需要知道的。

代码中还引用了Other.vue这个文件,我们还没有,需要创建一下,在src/views/other/目录下创建Other.vue文件,内容如下,

<template>
    Other
</template>
在Main.vue中引用路由

我们在上面确定了需要哪些路由,也在router/index.js中添加了对应的路由,但是没有实际应用他们,现在就来使用。

之前提过/src/Main.vue这个是所有页面的公共组件,也就是说所有的页面都是它的子组件(这个说法不准确,因为页面是没有组件这个概念的,但是大概是这个意思),Main.vue把整个页面范围三个部分,左侧的公共菜单栏,顶部的公共头部分,还有就是主体展示部分,也就是Main.vue里面template中的el-main这个标签里面的内容,如下,

<template>
    <div class="common-layout">
        <el-container>
            <el-aside width="180px">
                <common-aside></common-aside>
            </el-aside>
            <el-container>
                <el-header>
                    <common-header></common-header>
                </el-header>
                <el-main>
                    Main
                </el-main>
            </el-container>
        </el-container>
    </div>
</template>

现在el-main这个标签里面就是一个字符串Main,我们需要把这个Main替换成<router-view></router-view> ,这样就能应用之前添加的两个路由了。
其实我们在App.vue里面也做过同样的事情,查看App.vue中的代码就知道了,道理是一样的。

为左侧菜单栏添加跳转函数

上面我们已经添加了两个路由,以它们及对应的页面,也在Main.vue中应用了路由,但是路由不会自己跳转,需要人为的触发,一般情况下就是通过点击页面上了的某一个按钮,我们这个案例中就是点击左侧菜单栏,现在来实现这个功能。

其实实现起来很简单,就是为每一个菜单栏绑定一个click事件,这个事件触发的函数就是让浏览器跳转到对应的页面,具体实现看下面的代码。

修改之后,src/components/CommonAside.vue内容如下,

<template>
    <el-aside>
        <el-menu class="el-menu-vertical-demo" background-color="#545c64" text-color="#fff" :collapse-transition="false"
            active-text-color="#ffd04b">
            <h3>后台管理</h3>
            <el-menu-item :index="item.path + ''" v-for="item in list" :key="item.label" @click="handleClick(item)">
                <component class="icons" :is="item.icon"></component>
                <span>{{ item.label }}</span>
            </el-menu-item>
        </el-menu>
    </el-aside>
</template>

<script>
import { useRouter } from 'vue-router'


export default {
    setup() {
        const list = [
            {
                path: '/home',
                name: 'home',
                label: '首页',
                icon: 'home',
                url: '/home'
            },
            {
                path: '/other',
                name: 'other',
                label: '其它',
                icon: 'location',
                url: 'other'
            },
        ];
        const router = useRouter()  // 这是Vue3中使用router的方法,跟Vue2不太一样,需要注意一下
        const handleClick = (item) => {
            router.push({
                name: item.names
            });
        }
        return {
            list,
            handleClick,
        }
    }
}
</script>

<style lang="less" scoped>
.icons {
    width: 18px;
    height: 18px;
    margin-right: 4px;
}
.el-menu-vertical-demo {
    width: 100%;
    border-right: none;
    h3 {
        color: #fff;
        text-align: center;
        margin-top: 10px;
    }
}
</style>

我们在el-menu-item这个标签中绑定了click事件,触发handleClick函数,并传入item这个参数,handleClick这个函数的内容很简单,就是进行路由跳转,看代码就好。

到这里页面路由就能正常跳转了,大家可以运行项目之后点击左测的菜单栏试一下。

动态路由

这边笔记里只介绍了固定路由的情况,就是不管什么人来访问,能够访问的页面都是完全一样的,这种情况下就可以使用固定路由,也就是把路由写死在src/router/index.js中,但是还有可能不同的人能够访问的页面是不一样的,比如有不同权限的人可以访问不同的页面等等,这个时候就要用到动态路由了。

所谓动态路由,就是通过API从后端获取这个用户应该访问哪些API,一般是在用户登录的时候向后端请求一个API获取路由数据然后在渲染到vue-router中,这里有点复杂,不容易用文字写出来,想了解的话看我的代码和这个视频学习: https://www.bilibili.com/video/BV1QU4y1E7qo?p=87&vd_source=55550879a421ab9d1e89e4ff47481a4d

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
路由的children配置是用来定义子路由的。在VueRouter的参数中使用children配置来添加子路由。需要注意的是,在children中,子路由的路径不需要加斜杠/。 如果想要直接显示儿子路由或者女儿路由,可以在路由配置文件中使用redirect重定向来实现。具体的配置代码如下所示: ```javascript children: [ { path:"", redirect:"routerboy" }, { path:"routerboy", name:"routerboy", component:routerboy }, { path:"routergirl", name:"routergirl", component:routergirl } ] ``` 在主路由页面routerindex的代码中,首先要写入<router-view></router-view>来添加路由视图。然后使用router-link并写上子路由的位置路径,注意,这里需要写上完整的路径。例如: ```html <template> <div> <h3>路由首页</h3> <router-link to="/routerproject/routerindex/routerboy">跳转至儿子路由页面</router-link> <router-link to="/routerproject/routerindex/routergirl">跳转至女儿路由页面</router-link> <router-view></router-view> </div> </template> ``` 以上是关于路由的children配置和使用的一些说明和示例代码。通过配置和使用子路由,可以实现Vue应用中进行页面之间的切换和导航。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span> #### 引用[.reference_title] - *1* *2* *3* *4* [Vue --- router,路由嵌套children的基本使用](https://blog.csdn.net/qq_21980517/article/details/100073887)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值