当前位置: 首页 > article >正文

Vue 路由设置

为了防止遗忘,记录一下用Vue写前端配置路由时的过程,方便后续再需要用到时回忆。

一、举个例子

假如需要实现这样的界面逻辑:

        在HomePage中有一组选项卡按钮用于导航到子页面,而子页面Page1中有一个按钮,其响应事件是跳转到到一个全新的页面(不属于HomePage)。

二、实现过程

        按照例子中的需求,HomePage和Page3都是占满整个窗口的页面,也就是说它们应该是同级的,所以直接在App.vue放置一个<RouterView />作为HomePage和Page3的路由出口,代码如下:

// App.vue

<script setup>
import { RouterView } from 'vue-router'
</script>

<template>
  <RouterView />
</template>

        接下来在src目录下创建一个叫pages的文件夹,专门用来存放界面模板:

        在pages文件夹下新建HomePage,放置了两个按钮,分别用于触发链接到子页面1和子页面2:

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

    export default {
        setup() {
            const router = useRouter();

            const handleButton1 = () => {
                router.push("/page1");
            };

            const handleButton2 = () => {
                router.push("/page2");
            };

            return {handleButton1, handleButton2};
        },
    };

</script>

<template>
  <header>
    <h1>标题</h1>
  </header>

  <div>
    <span>
        <button @click="handleButton1">button1</button>
        <button @click="handleButton2">button2</button>
    </span>
  </div>
  <hr>

  <RouterView />
</template>

<style scoped>

</style>

        在pages文件夹下新建Page1。不同于HomePage,此处使用了window.open函数来跳转到新页面,参数“_blank”可以帮助我们以新链接打开界面:

<script>
    export default {
        setup() {
            const handleButton = () => {
                window.open("/Page3", "_blank");
            };

            return {handleButton};
        },
    };

</script>

<template>
  <header>
    <h2>Page1</h2>
  </header>

  <div>
    <button @click="handleButton">button</button>
  </div>
  <hr>

  <RouterView />
</template>

<style scoped>

</style>

        在pages文件夹下新建Page2:

<script setup>

</script>

<template>
  <header>
    <h2>Page2</h2>
  </header>

  <RouterView />
</template>

<style scoped>

</style>

        在pages文件夹下新建Page3: 

<script setup>
</script>

<template>
  <header>
    <h2>Page3</h2>
  </header>

  <RouterView />
</template>

<style scoped>

</style>

        完成以上操作后,我们已经创建了四个界面模板,接下来在main.js中导入这四个界面模板,并配置它们的路由关系:

// main.js

import { createApp } from 'vue'
import App from './App.vue'
import {createRouter, createWebHistory} from 'vue-router'
import HomePage from './pages/HomePage.vue'
import Page1 from './pages/Page1.vue'
import Page2 from './pages/Page2.vue'
import Page3 from './pages/Page3.vue'

// 创建路由器
const router = createRouter({
    history: createWebHistory(),
    routes: [
        {path: "/", name: 'home', component: HomePage, redirect: "/Page1", // redirect表示默认路由到/Page1
            children: [
                {
                    path: "Page1",
                    name: '1',
                    component: Page1,
                },
                {
                    path: "Page2", 
                    name: '2', 
                    component: Page2,
                },
            ]
        },
        {
            path: '/Page3', name: '3', component: Page3,
        }
    ]
})

const app = createApp(App)
app.use(router)
app.mount('#app')

        按照上面的配置,我们把Page1和Page2设置为了HomePage的子路由,这样的话Page1和Page2只会在HomePage.vue下的<RouterView />路由出口显示。

        而因为我们把Page3设置成了和HomePage是同一等级的路由,所以Page3会在App.vue下的<RouterView />路由出口显示,从而达到了让Page3占满整个窗口显示的需求。

三、运行效果

        点击button1和button2可以分别链接到HomePage下的子页面Page1和Page2:

         点击Page1中的button可以跳转到占满整个窗口的Page3:


http://www.kler.cn/news/328842.html

相关文章:

  • DBCP数据库连接池以及在Tomcat中配置JNDI数据源
  • 初试React前端框架
  • GPU在深度学习中的应用与未来发展
  • Eureka注册中心如何实现集群
  • 第 30 章 XML
  • 使用DolphinScheduler调度实现sqoop增量导入时遇到 Caused by:Class QueryResult not found 错误解决
  • C语言 编译和链接
  • 深入解析 https
  • 在树莓派上部署开源监控系统 ZoneMinder
  • html+css+js实现step进度条效果
  • E36.C语言模拟试卷1第一大题选题解析与提示(未完)
  • 通过ts declare包装一个js库
  • 408知识点自检
  • 安全开发指南
  • 彻底连接pip工具
  • 前端框架对比和选择指南
  • 1panel申请https/ssl证书自动续期
  • WPF入门教学二十三 自定义控件开发
  • 若依从redis中获取用户列表
  • 408算法题leetcode--第21天
  • Java每日面试题(JVM)(day15)
  • sentinel微服务部署
  • vue3+PPTXjs 在线ppt预览
  • 基于单片机多功能称重系统设计
  • C++ | Leetcode C++题解之第451题根据字符出现频率排序
  • YOLO11改进|注意力机制篇|引入MLCA轻量级注意力机制
  • Azure Kinect 人体跟踪关节
  • RUP:用例驱动、以架构为中心的迭代增量开发模式
  • 松山湖全球首秀:传祺华为概念车发布
  • 【场景题】秒杀系统设计以及解决方案