01、New.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>
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: [ { // 一定要使用name name: 'neirong', // 增加帶有引數的路由,加個問號是可傳可不傳沒有就不顯示 path: 'detail/:id/:title/:content?', component: Detail, // 第一種寫法: props: true, }, ] }, ] }) export default router
03、Detail.vue程式碼如下:
<template> <ul class="news-list"> <li>編號:{{ id }}</li> <li>編號:{{ title }}</li> <li>編號:{{ content }}</li> </ul> </template> <script setup lang="ts" name="home"> // import {useRoute} from 'vue-router' // // const route = useRoute() // console.log(route) defineProps(['id', 'title', 'content']) </script> <style scoped> .news-list { /* 新增邊框樣式 */ border: 2px solid #000; /* 邊框寬度、樣式和顏色 */ border-radius: 5px; /* 可選:新增邊框圓角 */ padding: 20px; /* 可選:給內部內容新增一些內邊距 */ margin: 20px; /* 可選:給元素新增一些外邊距,以便與其他元素隔開 */ } </style>
04、文件結構如下:
05、瀏覽器顯示如下,正常不報錯: