当前位置:首页 > 技术文章 > 正文内容

Vue3开发极简入门(13):编程式导航路由

zonemu1周前 (07-26)技术文章3

前面几节文章,写的都是配置路由。但是在实际项目中,下面这种路由导航的写法才是最常用的:

比如登录页面,服务端校验成功后,跳转至系统功能页面;通过浏览器输入URL直接进入系统功能页面后,读取本地存储的Token,并提交服务端校验,没有Token或者Token失效、校验失败则跳转至登录页面;B端系统,根据服务端返回的登录用户的权限资源列表,生成菜单栏。列表后面的编辑按钮等。

这就是编程式导航。

列表页Staff.vue:

<template>
    <div class="staff">
        <main class="container">
            <aside class="sidebar">
                <button @click="naviTo(staff.id)" v-for="staff in staffList" :key="staff.id">{{ staff.name }}</button>
            </aside>
            <section class="content">
                <router-view />
            </section>
        </main>
    </div>
</template>
<script lang='ts' setup name='Staff'>
import { reactive } from 'vue';
import { useRouter } from 'vue-router';

const staffList = reactive([
    { id: "1", name: "张三", age: 22 },
    { id: "2", name: "李四", age: 23 },
    { id: "3", name: "王五", age: 24, extInfo: "其他信息" }
])

const router = useRouter()

function findStaffById(id: string) {
    return staffList.find(item => item.id === id)
}

function naviTo(id: string) {
    console.log('跳转:', id);
    const staffInfo = findStaffById(id)
    router.push({
        name: 'staffInfo',
        params: staffInfo,
        query: staffInfo
    })
}
</script>

也可以这么写:

<button @click="naviTo(staff)" v-for="staff in staffList" :key="staff.id">{{ staff.name }}</button>

interface Staff{
    id:string,
    name:string,
    age:number,
    extInfo?:string
}

const router = useRouter()

function naviTo(staff: Staff) {
    console.log('跳转:', staff.id);
    router.push({
        name: 'staffInfo',
        params: {id:staff.id,name:staff.name,age:staff.age,extInfo:staff.extInfo},
        query: {id:staff.id,name:staff.name,age:staff.age,extInfo:staff.extInfo}
    })
}

其中router.push(...)就等于<router-link :to="...">

相关文章

「图解」父子组件通过 props 进行数据交互的方法

1.组件化开发,经常有这样的一个场景,就是父组件通过 Ajax 获取数据,传递给子组件,如何通过 props 进行数据交互来实现,便是本图解的重点。2.代码的结构3.具体代码 ①在父组件 data 中...

10分钟搞定gitlab-ci自动化部署(gitlab ci 配置)

gitlab-ci 是持续集成工具/自动化部署工具,类似 jenkins。持续集成 是将代码集成到共享存储库并尽可能早地自动构建/测试每个更改的实践 - 通常一天几次。概述在编码完成时都会进行打包发布...

配置GitLab流水线和门禁系统(gitlab工作流)

在项目开发的过程中,为了保证代码质量,我们会使用诸多代码质量检测工具,这些工具或是在本地,或是在云端,虽然工具可以检测出异常问题,但是这些问题还是需要我们程序员来修复,如果我们不强制所有人必须修复异常...

jenkins2.107+tomcat8+jdk1.8的安装和发布代码3种方式

jenkins2.107+tomcat8+jdk1.8的安装和发布代码3种方式如果对运维课程感兴趣,可以在b站上或csdn上搜索我的账号: 运维实战课程,可以关注我,学习更多免费的运维实战技术视频1....

我常在使用的几个 VIM 插件(我常在使用的几个 vim 插件)

今天给你分享几个我觉得还不错的 VIM 插件,也许能给你带来一点「惊喜感」。vim主题插件 你完全可以让你的编辑器按照你喜欢的样子呈现,在 vimcolors 这个网站中,汇集了很多的主题,你可以进去...

2个将HTML5打包成app的方法(h5打包成android)

越来越多的开发者热衷于使用html5+JavaScript开发移动Web App。不过,HTML5 Web APP的出现能否在未来取代移动应用,就目前来说,还是个未知数。那么,有什么办法,既可以使用H...