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

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

zonemu2个月前 (07-26)技术文章28

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

比如登录页面,服务端校验成功后,跳转至系统功能页面;通过浏览器输入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="...">

相关文章

vue:组件中之间的传值(vue组件之间传参)

一、父子组件之间的传值----props/$emit1、父组件向子组件传值--props2.子组件想父组件传值-this.$emit('select',item)二、父组件向下(深层)...

Vue3开发极简入门(14):组件间通信之props、ref&amp;defineExpose

组件间的关系可以分为:父子关系。以前文的代码为例,最典型的就是App.vue与Car.vue这种,APP是父,Car是子。祖孙关系。如果Car再引入一个子组件,这个子组件与App就是祖孙关系。其他。比...

react hooks自定义组件居然能这样做

前言  这里写一下如何封装可复用组件。首先技术栈 react hooks + props-type + jsx封装纯函数组件。类组件和typeScript在这不做讨论,大家别白跑一趟。接下来会说一下封...

Vue3 中有哪些值得深究的知识点?(vue3例子)

众所周知,前端技术一直更新很快,这不 vue3 也问世这么久了,今天就来给大家分享下vue3中值得注意的知识点。喜欢的话建议收藏,点个关注!1、createAppvue2 和 vue3 在创建实例时,...

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

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

K8s 的 Namespace 到底解决了什么问题?

在 Kubernetes 的世界里,资源调度、服务编排以及自动化运维构成了它强大的基础架构能力。但随着集群规模的扩大和团队协作复杂度的提升,仅靠原始的资源管理手段已经难以支撑多租户或大型项目的管理需求...