日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > vue >内容正文

vue

【Vue3从零开始-实战】S14:详情页回退事件及路由参数的传递获取数据

發布時間:2023/12/20 vue 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Vue3从零开始-实战】S14:详情页回退事件及路由参数的传递获取数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

實戰已經開始了!上一篇已經將詳情頁的店鋪信息展示出來了,但是頂部還有一個搜索框和返回按鈕,而且詳情頁的店鋪數據是在頁面中固定寫死的,所以本章節會將頂部搜索欄進行布局,并且通過返回按鈕可以回到首頁。其次會通過路由傳參的方式,從首頁跳轉到詳情頁,并動態獲取詳情頁店鋪數據。

搜索框布局

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-KjGtO7qf-1658392912044)(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/6e3b726e095d4e67a81837f09830ffc7~tplv-k3u1fbpfcp-zoom-in-crop-mark:4536:0:0:0.image?)]

🌀 根據稿圖,我們發現搜索框部分只有一個input輸入框和一個返回按鈕,比較簡單,所以下面就直接貼代碼了,有興趣的朋友可以自己設計的哦。

👉 DOM元素

<div class="search"><div class="search__back iconfont">&#xe6f2;</div><div class="search__content"><span class="search__content__icon iconfont">&#xe62d;</span><input class="search__content__input" placeholder="請輸入商品名稱" /></div> </div>

👉 樣式

.search {display: flex;margin: .2rem 0 .16rem 0;line-height: .32rem;&__back {width: .3rem;font-size: .24rem;color: #B6B6B6;}&__content {display: flex;flex: 1;background: #F5F5F5;border-radius: .16rem;&__icon {width: .44rem;text-align: center;color: #B7B7B7;}&__input {display: block;width: 100%;padding-right: .2rem;border: none;outline: none;background: none;height: .32rem;font-size: .14rem;color: #333;&::placeholder {color: #333;}}} }

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-rICW8HzB-1658392912045)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c3474d62f07842e59476d0bf7b82f389~tplv-k3u1fbpfcp-zoom-in-crop-mark:4536:0:0:0.image?)]

router-link標簽實現跳轉

🌀 頁面跳轉之前在首頁和登錄注冊頁面之間都有寫過,但是用的點擊事件去跳轉的,這次我們就用以前學過但沒有實際用過的router-link標簽實現

<router-link to="/shop" v-for="item in nearbyList" :key="item.id"><ShopItem :item="item" /> </router-link>
  • 將Nearby.vue中的子組件標簽用router-link標簽包裹起來。
  • 由于列表頁上的每一條數據都得點擊跳轉,所以需要將循環事件放在router-link標簽上。
  • router-link標簽還會接收一個參數 to ,它表示需要跳轉到哪個路由(對應路由配置頁中的path)

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-GL92qM4e-1658392912045)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/3542fb5c16a743408bb7218199601ed0~tplv-k3u1fbpfcp-zoom-in-crop-mark:4536:0:0:0.image?)]

  • 在瀏覽器中可以看到多了幾個 a 標簽包裹著列表中的元素
  • 由于 a 標簽的默認樣式,所以列表頁上有下劃線。

👉 去掉a標簽的下劃線

a{text-decoration: none; }

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-radf3g8N-1658392912046)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/e36a5ed9c2a045379e9cbfda3b5c6d30~tplv-k3u1fbpfcp-zoom-in-crop-mark:4536:0:0:0.image?)]

router.back函數回退

router.back函數是vue-router插件提供的一個回退事件方法。

👉 給詳情頁頂部欄中的返回按鈕一個點擊事件

<div class="search__back iconfont" @click="handleBackClick">&#xe6f2;</div>

👉 引入所需的路由插件

import { useRouter } from 'vue-router'

👉 在setup函數中定義路由,并調用回退事件的方法

const router = useRouter() const handleBackClick = () => {router.back() }

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-XY7GW9oK-1658392912046)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/ef9e4cb319f84202bd239e5a89373a49~tplv-k3u1fbpfcp-zoom-in-crop-mark:4536:0:0:0.image?)]

店鋪信息動態數據

🌀 詳情頁中的店鋪信息是固定的數據,在實際項目中我們應該通過接口請求獲取到對應的店鋪信息,所以就需要根據首頁列表的店鋪ID來請求接口獲取到對應的店鋪數據了。

mock接口

👉 打開mock接口后臺,新增店鋪詳情接口

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Tfj7c84L-1658392912046)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/48c1b6b3ff80431da5a1c09581b57b1c~tplv-k3u1fbpfcp-zoom-in-crop-mark:4536:0:0:0.image?)]

👉 在詳情頁中通過get請求接口

  • 引入get請求
import { get } from '../../utils/request'
  • 進入頁面就需要直接請求接口
const data = reactive({ item: {} }) const getItemData = async () => {const result = await get('/api/shop/1')if (result.data.code === 0 && result.data.data) {data.item = result.data.data} } getItemData() const { item } = toRefs(data)

👉 為了看到效果,需要將setup函數里面原來寫死的數據刪除

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-paAQD4Bu-1658392912046)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/65d4de106ed04a1d8aa750e0127a30c4~tplv-k3u1fbpfcp-zoom-in-crop-mark:4536:0:0:0.image?)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-XzRtqZaN-1658392912047)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/d201dae4f932446e8240997d1825fedb~tplv-k3u1fbpfcp-zoom-in-crop-mark:4536:0:0:0.image?)]

  • 在接口請求的時候動態傳遞了一個id,也就是接口url后面的/:id

😲 在實際項目中,id是通過列表傳遞過去的,然后去請求接口,也就是需要將id動態化。

動態路由傳參

🌀 在接口后面可以添加/:id的方式獲取動態參數,其實在路由中也可以通過這種方式獲取到動態參數。

👉 打開路由配置文件,并重新配置詳情頁路由,在路由后面添加/:id

{path: '/shop/:id',name: 'Shop',component: () => import(/* webpackChunkName: "shop" */ '../views/shop/Shop') }

👉 首頁列表中點擊跳轉時,就需要通過v-bind指令動態綁定參數

<router-link :to="`/shop/${item.id}`" v-for="item in nearbyList" :key="item.id"><ShopItem :item="item" /> </router-link>
  • router-link標簽中的to就是動態跳轉路徑,里面綁定了當前循環的店鋪id

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-eGQqMy80-1658392912047)(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/69743a24ad144fe4a828275e9ea465d3~tplv-k3u1fbpfcp-zoom-in-crop-mark:4536:0:0:0.image?)]

  • 在瀏覽器地址欄中可以發現,當我們點擊列表中的店鋪時,地址欄的URL后面就會動態添加當前點擊的店鋪ID

😲 但是接口請求的時候,需要獲取到地址欄的店鋪id才能讓接口后面的參數也變成動態的。

route獲取路由參數

👉 在詳情頁中引入useRoute

import { useRouter, useRoute } from 'vue-router'

👉 為了知道useRoute是干啥的,我們需要在setup函數中調用useRoute方法,并打印出來看看

const route = useRoute() console.log(route)

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-uO3Tfdvf-1658392912047)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/29ffc40470ab46699dae8ee3b7c2df6e~tplv-k3u1fbpfcp-zoom-in-crop-mark:4536:0:0:0.image?)]

useRoute函數是vue-router提供的一個用來獲取路由配置項的方法,里面有配置項中的name、path、params等。

  • name:配置項中路由的名稱。
  • params:路由項中傳遞的參數
  • path:路由項中跳轉的路徑

🔆 通過打印出來之后發現,可以通過useRoute函數中的params獲取到店鋪id

👉 修改接口傳遞參數的方式,將靜態參數改為動態參數

const result = await get(`/api/shop/${route.params.id}`)

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-4vMzQWJy-1658392912047)(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/14dc6b62501746a38a397950beea42bd~tplv-k3u1fbpfcp-zoom-in-crop-mark:4536:0:0:0.image?)]

由于是模擬接口數據,所以每次請求的ID雖然變了,但是接口數據還是固定的。

拆分詳情頁setup函數

🌀 不管是在首頁,亦或是登錄注冊頁面,我們都去拆分過setup函數中的邏輯,也在前面的文章中說明過setup函數的職責。

🔆 下面就直接拆分了,也會按照前面文章中的拆分方式。

<script> import { reactive, toRefs } from 'vue' import { useRouter, useRoute } from 'vue-router' import { get } from '../../utils/request' import ShopItem from '../../components/shopItem'// 獲取當前店鋪信息 const useShopInfoEffect = () => {const route = useRoute()const data = reactive({ item: {} })const getItemData = async () => {const result = await get(`/api/shop/${route.params.id}`)if (result.data.code === 0 && result.data.data) {data.item = result.data.data}}const { item } = toRefs(data)return { item, getItemData } }// 點擊回退邏輯 const useBackRouterEffect = () => {const router = useRouter()const handleBackClick = () => {router.back()}return handleBackClick }export default {name: 'Shop',components: {ShopItem},setup () {const { item, getItemData } = useShopInfoEffect()const handleBackClick = useBackRouterEffect()getItemData()return { item, handleBackClick }} } </script>

總結

本篇文章主要講解了路由中的回退事件和動態傳參的方式,并在接口請求中獲取到路由傳遞的參數。

總結

以上是生活随笔為你收集整理的【Vue3从零开始-实战】S14:详情页回退事件及路由参数的传递获取数据的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产欧美精品一区二区三区 | 午夜影院在线看 | 中文字幕亚洲专区 | 日韩有色 | 天堂精品一区二区三区 | 欧美一区二区在线播放 | 91黄色免费看 | 国产黄av | 毛片xxx | 久久精品h | 美国性生活大片 | 国产成人一区二区三区电影 | 精品动漫3d一区二区三区免费版 | 国产精品不卡一区 | 久艹在线| 成人深夜视频 | 黄色片在线免费观看 | 国产剧情av在线 | 96国产精品 | 咪咪av| 国产一区二区三区免费观看视频 | 国产无码精品一区二区 | 色av免费 | 玩弄人妻少妇500系列视频 | 亚洲精品第五页 | 福利视频免费 | 麻豆国产原创 | 福利av在线| 久久久香蕉网 | 中出一区 | 爽妇网国产精品 | 久久看av | 狠狠干在线 | 丰满人妻一区二区三区53号 | 非洲黄色片 | 色欲人妻综合网 | 中文字幕在线一区 | 77久久| 毛片导航 | 亚洲精品成人片在线观看精品字幕 | 欧美在线免费视频 | 在线观看视频免费 | 美女久久久久久 | 精品国产乱码久久久久久88av | 51精品国产 | 别揉我奶头啊嗯一区二区 | 胖女人做爰全过程 | 亚洲AV无码精品色毛片浪潮 | 91色多多| 草草影院在线观看 | 国产白浆视频 | 麻豆传媒在线播放 | 欧美日韩网 | 久久九九国产精品 | 国产青青操| 国产一区二区啪啪啪 | 欧美一区二区三区久久 | 91成人亚洲 | 国产成人精品一区二区三区在线观看 | 麻豆小视频| 超碰在线色 | 欧美色图亚洲自拍 | 公车激情云雨小说 | 久久色资源网 | 欧美黄色a | 天堂色在线 | 久久久无码18禁高潮喷水 | 欧美在线视频你懂的 | 99极品视频| 97香蕉久久夜色精品国产 | 轮乱| 国产婷婷一区二区三区久久 | 人妻夜夜爽天天爽三区麻豆av网站 | 欧美乱强伦| 张柏芝亚洲一区二区三区 | 欧美精品videos极品 | 亚洲理论片 | 久久艹中文字幕 | 91亚洲国产成人精品一区二区三 | 男人插入女人下面的视频 | 五月六月丁香 | 毛片网在线观看 | 国产一区二区在线电影 | 欧美天天性| bt天堂新版中文在线地址 | 国产片网站 | 日韩中文在线观看 | 97香蕉久久夜色精品国产 | 精品一区二区在线看 | 国产视频自拍一区 | 亚洲老妇色熟女老太 | 免费观看在线播放 | 99re8在线精品视频免费播放 | 三级黄视频| www.四虎影视 | 中文字幕一区二区三区精华液 | 成人国产精品蜜柚视频 | 草草影院一区二区三区 | 性久久久久久 |