034、Vue3+TypeScript基础,路由params参数的使用

news/2024/9/17 23:23:29/文章来源:https://www.cnblogs.com/tianpan2019/p/18368436

01、main.js代码如下:

// 引入createApp用于创建Vue实例
import {createApp} from 'vue'
// 引入App.vue根组件
import App from './App.vue'//引入路由
import router from './router'const app = createApp(App);
//使用路由
app.use(router);
// App.vue的根元素id为app
app.mount('#app')

02、index.ts代码如下:

//创建路由并暴露出去
import {createRouter, createWebHistory} from 'vue-router'
import Home from '@/view/Home.vue'
import About from '@/view/About.vue'
import News from '@/view/News.vue'
import Detail from '@/view/Detail.vue'const router = createRouter({history: createWebHistory(),routes: [{name: 'zhuye', path: '/home', component: Home},{name: 'guanyu', path: '/about', component: About},{name: 'xinwen', path: '/news', component: News,//子类的path不需要加斜杠
            children: [{// 一定要使用namename: 'neirong',// 增加带有参数的路由,加个问号是可传可不传没有就不显示path: 'detail/:id/:title/:content?',component: Detail},]},]
})export default router

03、App.vue代码如下:

<template><div class="app"><h2 class="title">App.Vue路由测试</h2><Header></Header><!-- 导航区--><div class="navigate"><router-link :to="{name:'zhuye'}" class="nav-button">首页</router-link><router-link :to="{name:'xinwen'}" class="nav-button">新闻</router-link><router-link :to="{path:'/about'}" class="nav-button">关于</router-link></div><!-- 内容区--><div class="mai-content"><RouterView></RouterView></div></div>
</template><script lang="ts" setup name="App">
// 界面会根据当前路由的变化,在RouterView所在的位置渲染不同的组件
import {RouterView} from 'vue-router'
import Header from './components/Header.vue'
</script><style scoped>
.app {background-color: #ddd;box-shadow: 0 0 10px;border-radius: 10px;padding: 20px;
}.nav-button {display: inline-block; /* 让链接显示为块级元素,以便应用宽度和高度 */padding: 10px 20px; /* 内边距 */margin: 0 5px; /* 外边距,用于按钮之间的间隔 */text-decoration: none; /* 移除下划线 */color: white; /* 文本颜色 */background-color: #007bff; /* 背景颜色 */border-radius: 5px; /* 边框圆角 */transition: background-color 0.3s; /* 平滑过渡效果 */
}.nav-button:hover {background-color: #0056b3; /* 鼠标悬停时的背景颜色 */
}.nav-button.router-link-active {background-color: #28a745; /* 当前激活(路由匹配)时的背景颜色 */
}.mai-content {/* 添加边框样式 */border: 2px solid #000; /* 边框宽度、样式和颜色 */border-radius: 5px; /* 可选:添加边框圆角 */padding: 20px; /* 可选:给内部内容添加一些内边距 */margin: 20px; /* 可选:给元素添加一些外边距,以便与其他元素隔开 */
}
</style>

04、Header.vue代码如下:

<template class="hop-head"><h2 class="title">Vue路由测试header</h2>
</template><script setup lang="ts" name="hop-head">
import {onMounted, onUnmounted} from 'vue'onMounted(() => {console.log('header组件被挂载')
})
onUnmounted(() => {console.log('header组件被卸载')
})</script>
<style scoped>
.title {text-align: center;word-spacing: 5px;margin: 50px 0;height: 70px;line-height: 70px;background-image: linear-gradient(45deg, gray, white);border-radius: 15px;box-shadow: 0 0 10px;font-size: 20px;
}
</style>

05、News.vue代码如下:

<template><div class="app-container"><!-- 导航区域容器 --><div class="sidebar"><ul class="news-list"><!--第一种写法--><li v-for="news in newsList" :key="news.id"><router-link to="/news/detail/哈哈/你好/嘿嘿">{{ news.title }}</router-link></li><!--第二种写法--><li v-for="news in newsList" :key="news.id"><router-link :to="`/news/detail/${news.id}/${news.title}/${news.content}`">{{ news.title }}</router-link></li><!--第三种写法--><li v-for="news in newsList" :key="news.id"><router-link :to="{name: 'neirong',params: {id: news.id,title: news.title,// 就算路由不写这个参数,也可以正常跳转,因为路由带个问号// content: news.content}}">{{ news.title }}</router-link></li></ul></div><!-- 内容区域容器 --><div class="main-content"><RouterView></RouterView></div></div>
</template><script setup lang="ts" name="news">
import {reactive} from "vue";
import {RouterLink, RouterView} from "vue-router";const newsList = reactive([{id: 1, title: '新闻1', content: '内容1'},{id: 2, title: '新闻2', content: '内容2'},{id: 3, title: '新闻3', content: '内容3'},
])
</script><style scoped>
.app-container {display: flex; /* 使用Flexbox布局 */
}.sidebar {width: 150px; /* 导航栏宽度 */padding: 20px;box-sizing: border-box; /* 防止padding影响元素总宽度 */
}.news-list {list-style-type: none;padding: 0;
}.news-list li {margin-bottom: 10px; /*每一条间距*/
}.main-content {flex-grow: 1; /* 内容区域占据剩余空间 */padding: 20px;overflow-y: auto; /* 如果内容过多,允许垂直滚动 */
}
</style>

06、Detail.vue代码如下:

<template><ul class="news-list"><li>编号:{{ route.params.id }}</li><li>编号:{{ route.params.title }}</li><li>编号:{{ route.params.content }}</li></ul>
</template><script setup lang="ts" name="home">
import {useRoute} from 'vue-router'const route = useRoute()
console.log(route)
</script><style scoped>
.news-list {/* 添加边框样式 */border: 2px solid #000; /* 边框宽度、样式和颜色 */border-radius: 5px; /* 可选:添加边框圆角 */padding: 20px; /* 可选:给内部内容添加一些内边距 */margin: 20px; /* 可选:给元素添加一些外边距,以便与其他元素隔开 */
}
</style>

07、About.vue代码如下:

<template><div class="about"><h2>我是About页面</h2></div>
</template><script setup lang="ts" name="about">
</script><style scoped>
</style>

08、Home.vue代码如下:

<template><div class="home"><h2>我是Home页面</h2></div>
</template><script setup lang="ts" name="home">
</script><style scoped>
</style>

09、主目录如下:

 10、路由中params参数使用如下:

 11、浏览器效果如下:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/784053.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RocketMQ 的convertAndSend方法和syncSend方法区别

RocketMQ的convertAndSend方法和syncSend方法是两种不同的消息发送 convertAndSend方法是将消息内容转换为指定的格式,然后发送到指定的消息队列。这个方法是异步发送的,也就是说,发送消息后就立即返回并不等待对方的响应。 syncSend方法则是同步发送消息,也就是说发送消息…

CSDN取消关注博主才可阅读全文限制

安装这个脚本可以跳过关注 脚本地址作者:翎野君 出处:http://www.cnblogs.com/lingyejun/ 若本文如对您有帮助,不妨点击一下右下角的【推荐】。如果您喜欢或希望看到更多我的文章,可扫描二维码关注我的微信公众号《翎野君》。转载文章请务必保留出处和署名,否则保留追究法…

c语言中%f输出double型和float型值

001、[root@PC1 test]# ls test.c [root@PC1 test]# cat test.c #include <stdio.h>int main(void) {double i; //声明double型 和 float型变量float j;i = 3.14;j = 3.14;printf("i = %f\n", i);printf("j = %f\n", j);return 0; } […

unbuntu更新Python3版本到最新,安装依赖手动编译

安装依赖sudo apt update sudo apt install build-essential zlib1g-dev libffi-dev libssl-dev下载安装包,手动配置编译 官网查找对应linux版本tgz包wget https://www.python.org/ftp/python/3.11.0/Python-3.11.0.tgz tar -xzvf Python-3.11.0.tgz cd Python-3.11.0配置编译…

MISC-666

MISC-666 前言 很简单的一道题,主要是涉及hex转图片,文件头 PNG 文件头: 89 50 4E 47 0D 0A 1A 0A 文件尾: AE 42 60 82 题目 666.zip解压获得6个txt文件,内容分别如下 #1 89504e470d0a1a0a0000000d494844520000012c0000012c0806000000797d8e75000000017352474200aece1ce9…

ollama搭建本地ai大模型并应用调用

1、下载ollama 1)https://ollama.com 进入网址,点击download下载2)下载后直接安装即可。 2、启动配置模型 默认是启动cmd窗口直接输入1 ollama run llama3启动llama3大模型 或者启动千问大模型1 ollama run qwen2启动输入你需要输入的问题即可 3、配置UI界面 安装docker并部…

Fluent Editor:一个基于 Quill 2.0 的富文本编辑器,功能强大、开箱即用!

你好,我是Kagol,个人公众号:前端开源星球。带大家一起使用下 Fluent Editor,使用起来基本上和 Quill 没什么区别,只需要重点关注下增强的部分,比如表格、附件、@提醒、表情等模块。你好,我是 Kagol,个人公众号:前端开源星球。 今年4月份,听到 Quill 2.0 正式发布的消…

二进制下载部署Nginx

一、通过Nginx官网并采取二进制方式部署 Nginx官网 二、具体步骤[root@web01 yum.repos.d]# ll -d nginx.repo -rw-r--r--. 1 root root 398 Aug 17 22:01 nginx.repo [root@web01 yum.repos.d]# pwd /etc/yum.repos.d接下来可以直接使用 yum -y install nginx 则是直接从官方下…

c语言中%f和%lf读入浮点型数据

001、a、%lf、和 %f读入double型值[root@PC1 test]# ls test.c [root@PC1 test]# cat test.c ## 测试程序 #include <stdio.h>int main(void) {double i, j; // 声明两个double型变量printf("i: "); scanf("%lf", &…

万兆以太网协议栈的FPGA实现(三):万兆网CRC

参考: 基于FPGA的千兆以太网的实现(3)_以太网crc计算-CSDN博客CRC 802.11来自将8位数据同时输入,再输出32位CRC数值; 其能成功实现的原因就是因为并行化。(下路仅是部分的计算步骤)结合千兆网CRC的计算思想,我们只需要把第一轮单字节CRC的结果作为第二轮CRC的开始,就可…

面试场景题:一次关于线程池使用场景的讨论。

你好呀,我是歪歪。 来一起看看一个关于线程池使用场景上的问题,就当是个场景面试题了。 问题是这样的:字有点多,我直接给你上个图你就懂了:前端发起一个生成报表页面的请求,这个页面上的数据由后端多个接口返回,另外由于微服务化了,所以数据散落在每个微服务中,因此需…