Vue全栈开发旅游网项目(3)-Vue路由配置

news/2024/11/6 3:42:52 标签: vue.js, javascript, 前端

1. 配置路由

1.1 导入路由工具

文件地址:src\router\index.js

javascript">import { createRouter, createWebHistory } from 'vue-router'//导入配置路由的工具
import HomeView from '../views/HomeView.vue'//导入组件

const router = createRouter({//创建路由对象
  history: createWebHistory(import.meta.env.BASE_URL),//路由模式
  routes: [//配置路由地址
    {
      path: '/',//目标地址
      name: 'home',//路由名称
      component: HomeView//路由目标
    },
    {
      path: '/about/:id/:type',
      name: 'about',
      component: () => import('../views/AboutView.vue')
    }
  ]
})
export default router //暴露路由对象

1.2 About路由测试

文件地址:src\views\AboutView.vue

javascript"><template>
  <div class="about">
    <h1>早上好</h1>
  </div>
</template>

<style>
@media (min-width: 1024px) {
  .about {
    min-height: 100vh;
    display: flex;
    align-items: center;
  }
}
</style>

1.3 挂载并导入路由

文件地址:src\main.js

javascript">import './assets/main.css'
import { createApp } from 'vue'
import App from './App.vue'//导入路由工具
import router from './router'
//引入vant ui
import Vant from 'vant'
import 'vant/lib/index.css'

const app = createApp(App)

app.use(router)//挂载路由组件
app.use(Vant)
app.mount('#app')

1.4 获取路由数据

导入工具useRoute,可以获取路由中携带的数据。

模板template模块 通过RouterView标记显示路由地址所指向的组件内容。

文件位置:src\App.vue

javascript"><script setup>
import { RouterLink,RouterView,useRoute } from 'vue-router'
const route = useRoute()//获得useRoute实例
</script>

<template>
  <RouterView />
</template>
<style scoped></style>

2.路由地址参数(from App.vue)

RouterLink类似于a标记可实现页面跳转,该标记支持路由地址匹配,to属性为匹配地址目标

javascript"><template>
  <header>
    <div class="wrapper">
      <nav>
        <RouterLink to="/">主页</RouterLink> -->
        <RouterLink to="/about">
          关于我们
          {{ route.params.id }}
          {{ route.params.type }}
          {{ route.query.name }}
          {{ route.query.sort }}
        </RouterLink>
      </nav>
    </div>
  </header>
  <RouterView />
</template>

3.景点详情页面开发

3.1 开发搜索界面各组件

文件地址:src\views\Search.vue

3.1.1 script行为模块:

javascript"><script setup>
import TripFooter from '@/components/common/Footer.vue';
import SightItem from '@/components/common/ListSight.vue';
import { ref,onMounted } from 'vue'
//景点名称
const sightName = ref('')
//景点列表
const dataList = ref([])
//总记录
const totalItem = ref(0)
//当前页码
const currentPage = ref(1)
//每页数据的大小
const perPage = ref(5)
//搜索函数
const onSearch = ()=>{
    console.log('onSearch')
}
</script>

3.1.2  template结构模块

javascript"><template>
    <div class="page-search">
        <!-- 标题 -->
        <van-nav-bar title="搜索景点"/>
        <!-- 搜索框 -->
        <van-search v-model="sightName" 
        show-action
        label="景点"
        placeholder="请搜索关键词"
        @search="onSearch">
        <template #action>
            <div @click="onSearch">搜索</div>
        </template>
        </van-search> 
        <!-- 景点列表 -->
        <div class="sight-list">
            <SightItem v-for="item in dataList"
            :key="item.id"
            :item="item"/>
        </div>
        <!-- 分页 -->
        <van-pagination v-model="currentPage"
        :total-items="totalItem"
        :items-per-page="perPage">
        </van-pagination>
        <!-- 底部导航 -->
        <TripFooter/>
    </div>
</template>

3.2 导入搜索页面的路由

javascript">import { createRouter, createWebHistory } from 'vue-router'
import HomeView from '../views/HomeView.vue'
import Search from '@/views/Search.vue'👈

const router = createRouter({
  history: createWebHistory(import.meta.env.BASE_URL),
  routes: [
    {
      path: '/',
      name: 'home',
      component: HomeView
    },
    {👇
      path:'/search',
      name:'Search',
      component:Search
    }
  ]
})
export default router

3.3 添加按键路由功能

文件地址:src\components\common\Footer.vue

javascript"><script setup>
import { ref } from 'vue';
const active =ref()
</script>
<template>
    <div>
        <van-tabbar v-model="active" placeholder>
            <van-tabbar-item icon="wap-home-o" name="home" :to="{name:'home'}">首页</van-tabbar-item>
            <van-tabbar-item icon="search" name="search" :to="{name:'Search'}">搜索</van-tabbar-item>
            <van-tabbar-item icon="user-o" name="mine">我</van-tabbar-item>
        </van-tabbar>
    </div>
</template>

4.成果演示

脚部分中,“首页”与“搜索”功能可正常运行


http://www.niftyadmin.cn/n/5740124.html

相关文章

pytorch知识蒸馏测试

import torch from torch import nn,optim import torch.utils import torch.utils.data import torch.utils.data.dataloader from torchvision import transforms,datasets

FPGA实现以太网(一)、以太网基础知识

系列文章目录 文章目录 系列文章目录一、以太网简介二、OSI七层模型三、TCP/IP五层模型四、MAC-PHY接口五、MAC帧格式六、IP帧格式6.1 IP首部校验和计算6.2 IP首部校验和校验 七、UDP帧格式7.1 UDP头部校验和计算 一、以太网简介 以太网&#xff08;Ethernet&#xff09;是一种…

记一次:Clickhouse同步mysql数据库

ClickHouse可以通过使用MaterializeMySQL引擎来实现与MySQL的数据同步。 前言&#xff1a;因为数据量比较大&#xff0c;既然要分库&#xff0c;为何不让clickhouse同步一下mysql数据库呢&#xff1f; 零、前期准备--mysql的查询和配置 1 查询mysql的配置状态 查询以下语句…

三维测量与建模笔记 - 3.1 相机标定基本概念

成像领域有多个标定概念 笔记所说的相机标定主要是指几何标定。 相机几何模型基于小孔成像原理&#xff0c;相关文章很多&#xff0c;上图中R t矩阵是外参矩阵&#xff08;和相机在世界空间中的位姿相关&#xff09;&#xff0c;K矩阵是内参矩阵&#xff08;和相机本身参数相关…

【Android】Gradle 7.0+ 渠道打包配置

声明 该配置主要解决打包apk/aab需要动态修改渠道字段,方便区分渠道上架国内商店。 暂不支持批量打包(7.4版本无法通过只修改outputFileName的形式批量处理) 因为构建时需要拷贝/创建Output,然后修改outputFileName才能处理批量打包,但拷贝/创建在高版本中失效了。 目前的…

【UML】- 用例图(结合银行案例解释其中的奥义)

目录 一、相关介绍 作用&#xff1a; 组成&#xff1a; 关系 二、使用具体银行案例解释各组成部分的含义 1、系统 2、参与者 3、用例 4、关联关系 5、扩展关系 6、泛化&#xff08;继承&#xff09;关系 三、成品 一、相关介绍 作用&#xff1a; 用例图可以描述一个…

【学习日记】Anaconda的安装与使用-小白大学生

目录 日记说明 解压安装&#xff1a; 配置 使用 日记说明 作者是个大学生 这个专栏主要收集课时常用的软件 以及女朋友上课用的软件的教程 所有安装包可以私聊我获取 免费 提前清除已有python环境 windows11 Anaconda-2024.02 垃圾话&#xff1a; Anaconda 是全球领先的数…

高阶函数--python

高阶函数应当满足至少下面一个条件&#xff1a; 接受一个或多个函数参数 输出一个函数 下面用一个例子来理解高阶函数。 一、高阶函数 先看一个简单的函数 例一&#xff1a; 例二&#xff1a; 是高阶函数&#xff0c;因为满足条件&#xff0c;返回一个函数 并且有闭包&a…