日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > vue >内容正文

vue

uni-app 小程序项目三 1. 商品列表、过滤器、封装商品item组件、上拉加载、节流阀、下拉刷新、2. 商品详情、轮播图、商品价格闪烁问题 3.加入购物车、vuex、持久化存储、mixiins

發(fā)布時(shí)間:2024/1/8 vue 65 豆豆

1.0 創(chuàng)建 goodslist 分支

1.1 定義請(qǐng)求參數(shù)對(duì)象

  • 為了方便發(fā)起請(qǐng)求獲取商品列表的數(shù)據(jù),我們要根據(jù)接口的要求,事先定義一個(gè)請(qǐng)求參數(shù)對(duì)象:
  • data() {return {// 請(qǐng)求參數(shù)對(duì)象queryObj: {// 查詢(xún)關(guān)鍵詞query: '',// 商品分類(lèi)Idcid: '',// 頁(yè)碼值pagenum: 1,// 每頁(yè)顯示多少條數(shù)據(jù)pagesize: 10}} }
  • 將頁(yè)面跳轉(zhuǎn)時(shí)攜帶的參數(shù),轉(zhuǎn)存到 queryObj 對(duì)象中:
  • onLoad(options) {// 將頁(yè)面參數(shù)轉(zhuǎn)存到 this.queryObj 對(duì)象中this.queryObj.query = options.query || ''this.queryObj.cid = options.cid || '' }
  • 為了方便開(kāi)發(fā)商品分類(lèi)頁(yè)面,建議大家通過(guò)微信開(kāi)發(fā)者工具,新建商品列表頁(yè)面的編譯模式:
  • 1.2 獲取商品列表數(shù)據(jù)

  • 在 data 中新增如下的數(shù)據(jù)節(jié)點(diǎn):
  • onLoad 生命周期函數(shù)中,調(diào)用 getGoodsList 方法獲取商品列表數(shù)據(jù):
  • 在 methods 節(jié)點(diǎn)中,聲明 getGoodsList 方法如下:
  • data() {return {// 商品列表的數(shù)據(jù)goodsList: [],// 總數(shù)量,用來(lái)實(shí)現(xiàn)分頁(yè)total: 0} }onLoad(options) {// 調(diào)用獲取商品列表數(shù)據(jù)的方法this.getGoodsList() }methods: {// 獲取商品列表數(shù)據(jù)的方法async getGoodsList() {// 發(fā)起請(qǐng)求const { data: res } = await uni.$http.get('/api/public/v1/goods/search', this.queryObj)if (res.meta.status !== 200) return uni.$showMsg()// 為數(shù)據(jù)賦值this.goodsList = res.message.goodsthis.total = res.message.total} }

    1.3 渲染商品列表結(jié)構(gòu)

  • 在頁(yè)面中,通過(guò) v-for 指令,循環(huán)渲染出商品的 UI 結(jié)構(gòu):(用到了 block 空白符)
  • 為了防止某些商品的圖片不存在,需要在 data 中定義一個(gè)默認(rèn)的圖片、并在頁(yè)面渲染時(shí)按需使用:
  • 美化商品列表的 UI 結(jié)構(gòu):
  • <template><view><view class="goods-list"><block v-for="(goods, i) in goodsList" :key="i"><view class="goods-item"><!-- 商品左側(cè)圖片區(qū)域 --><view class="goods-item-left"> // 在這里使用兩個(gè)圖片做保險(xiǎn)<image :src="goods.goods_small_logo || defaultPic" class="goods-pic"></image></view><!-- 商品右側(cè)信息區(qū)域 --><view class="goods-item-right"><!-- 商品標(biāo)題 --><view class="goods-name">{{goods.goods_name}}</view><view class="goods-info-box"><!-- 商品價(jià)格 --><view class="goods-price">{{goods.goods_price}}</view></view></view></view></block></view></view> </template>data() {return {// 默認(rèn)的空?qǐng)D片defaultPic: 'https://img3.doubanio.com/f/movie/8dd0c794499fe925ae2ae89ee30cd225750457b4/pics/movie/celebrity-default-medium.png'} }.goods-item {display: flex;padding: 10px 5px;border-bottom: 1px solid #f0f0f0;.goods-item-left {margin-right: 5px;.goods-pic {width: 100px;height: 100px;display: block;}}.goods-item-right {display: flex;flex-direction: column;justify-content: space-between;.goods-name {font-size: 13px;}.goods-price {font-size: 16px;color: #c00000;}} }

    1.4 把商品 item 項(xiàng)封裝為自定義組件

  • components 目錄上鼠標(biāo)右鍵,選擇 新建組件 my-goods: (沒(méi)有 components 文件夾就新建一個(gè))
  • goods_list 頁(yè)面中,關(guān)于商品 item 項(xiàng)相關(guān)的 UI 結(jié)構(gòu)、樣式、data 數(shù)據(jù),封裝到 my-goods 組件中:
  • <template><view class="goods-item"><!-- 商品左側(cè)圖片區(qū)域 --><view class="goods-item-left"><image :src="goods.goods_small_logo || defaultPic" class="goods-pic"></image></view><!-- 商品右側(cè)信息區(qū)域 --><view class="goods-item-right"><!-- 商品標(biāo)題 --><view class="goods-name">{{goods.goods_name}}</view><view class="goods-info-box"><!-- 商品價(jià)格 --><view class="goods-price">{{goods.goods_price}}</view></view></view></view> </template><script>export default {// 定義 props 屬性,用來(lái)接收外界傳遞到當(dāng)前組件的數(shù)據(jù)props: {// 商品的信息對(duì)象goods: {type: Object,defaul: {},},},data() {return {// 默認(rèn)的空?qǐng)D片defaultPic: 'https://img3.doubanio.com/f/movie/8dd0c794499fe925ae2ae89ee30cd225750457b4/pics/movie/celebrity-default-medium.png',}},} </script><style lang="scss">.goods-item {display: flex;padding: 10px 5px;border-bottom: 1px solid #f0f0f0;.goods-item-left {margin-right: 5px;.goods-pic {width: 100px;height: 100px;display: block;}}.goods-item-right {display: flex;flex-direction: column;justify-content: space-between;.goods-name {font-size: 13px;}.goods-price {font-size: 16px;color: #c00000;}}} </style>
  • 在 goods_list 組件中,循環(huán)渲染 my-goods 組件即可:
  • <view class="goods-list"><block v-for="(item, i) in goodsList" :key="i"><!-- 為 my-goods 組件動(dòng)態(tài)綁定 goods 屬性的值 --><my-goods :goods="item"></my-goods></block> </view>

    1.5 使用過(guò)濾器處理價(jià)格

  • 在 my-goods 組件中,和 data 節(jié)點(diǎn)平級(jí),聲明 filters 過(guò)濾器節(jié)點(diǎn)如下:
  • filters: {// 把數(shù)字處理為帶兩位小數(shù)點(diǎn)的數(shù)字tofixed(num) {return Number(num).toFixed(2)} }
  • 在渲染商品價(jià)格的時(shí)候,通過(guò)管道符 | 調(diào)用過(guò)濾器:
  • <!-- 商品價(jià)格 --> <view class="goods-price">{{goods.goods_price | tofixed}}</view>

    1.6 上拉加載更多

  • 打開(kāi)項(xiàng)目根目錄中的 pages.json 配置文件,為 subPackages 分包中的 goods_list 頁(yè)面配置上拉觸底的距離:
  • "subPackages": [{"root": "subpkg","pages": [{"path": "goods_detail/goods_detail","style": {}},{"path": "goods_list/goods_list","style": {"onReachBottomDistance": 150 // 就這一行代碼}},{"path": "search/search","style": {}}]}]
  • goods_list 頁(yè)面中,和 methods 節(jié)點(diǎn)平級(jí),聲明 onReachBottom 事件處理函數(shù),用來(lái)監(jiān)聽(tīng)頁(yè)面的上拉觸底行為:
  • // 觸底的事件 onReachBottom() {// 讓頁(yè)碼值自增 +1this.queryObj.pagenum += 1// 重新獲取列表數(shù)據(jù)this.getGoodsList() }
  • 改造 methods 中的 getGoodsList 函數(shù),當(dāng)列表數(shù)據(jù)請(qǐng)求成功之后,進(jìn)行新舊數(shù)據(jù)的拼接處理:
  • // 獲取商品列表數(shù)據(jù)的方法 async getGoodsList() {// 發(fā)起請(qǐng)求const { data: res } = await uni.$http.get('/api/public/v1/goods/search', this.queryObj)if (res.meta.status !== 200) return uni.$showMsg()// 為數(shù)據(jù)賦值:通過(guò)展開(kāi)運(yùn)算符的形式,進(jìn)行新舊數(shù)據(jù)的拼接this.goodsList = [...this.goodsList, ...res.message.goods]this.total = res.message.total }

    1.7 通過(guò)節(jié)流閥防止發(fā)起額外的請(qǐng)求

  • 在 data 中定義 isloading 節(jié)流閥如下:
  • data() {return {// 是否正在請(qǐng)求數(shù)據(jù)isloading: false} }
  • 修改 getGoodsList 方法,在請(qǐng)求數(shù)據(jù)前后,分別打開(kāi)和關(guān)閉節(jié)流閥:
  • // 獲取商品列表數(shù)據(jù)的方法 async getGoodsList() {// ** 打開(kāi)節(jié)流閥this.isloading = true// 發(fā)起請(qǐng)求const { data: res } = await uni.$http.get('/api/public/v1/goods/search', this.queryObj)// ** 關(guān)閉節(jié)流閥 這個(gè) 就放在 請(qǐng)求數(shù)據(jù)的 正 下面 ,this.isloading = false // 省略其它代碼... }
  • 在 onReachBottom 觸底事件處理函數(shù)中,根據(jù)節(jié)流閥的狀態(tài),來(lái)決定是否發(fā)起請(qǐng)求:
  • // 觸底的事件 onReachBottom() {// 判斷是否正在請(qǐng)求其它數(shù)據(jù),如果是,則不發(fā)起額外的請(qǐng)求if (this.isloading) returnthis.queryObj.pagenum += 1this.getGoodsList() }

    1.8 判斷數(shù)據(jù)是否加載完畢

  • 如果下面的公式成立,則證明沒(méi)有下一頁(yè)數(shù)據(jù)了:
  • 當(dāng)前的頁(yè)碼值 * 每頁(yè)顯示多少條數(shù)據(jù) >= 總數(shù)條數(shù) pagenum * pagesize >= total
  • 修改 onReachBottom 事件處理函數(shù)如下:
  • // 觸底的事件 onReachBottom() {// 判斷是否還有下一頁(yè)數(shù)據(jù) 就這一行代碼if (this.queryObj.pagenum * this.queryObj.pagesize >= this.total) return uni.$showMsg('數(shù)據(jù)加載完畢!')// 判斷是否正在請(qǐng)求其它數(shù)據(jù),如果是,則不發(fā)起額外的請(qǐng)求if (this.isloading) returnthis.queryObj.pagenum += 1this.getGoodsList() }

    1.9 下拉刷新

  • pages.json 配置文件中,為當(dāng)前的 goods_list 頁(yè)面單獨(dú)開(kāi)啟下拉刷新效果:
  • "subPackages": [{"root": "subpkg","pages": [{"path": "goods_detail/goods_detail","style": {}}, {"path": "goods_list/goods_list","style": {"onReachBottomDistance": 150,"enablePullDownRefresh": true, // 就這 兩行"backgroundColor": "#F8F8F8" // 代碼}}, {"path": "search/search","style": {}}] }]
  • 監(jiān)聽(tīng)頁(yè)面的 onPullDownRefresh 事件處理函數(shù):
  • // 下拉刷新的事件 onPullDownRefresh() {// 1. 重置關(guān)鍵數(shù)據(jù)this.queryObj.pagenum = 1this.total = 0this.isloading = falsethis.goodsList = []// 2. 重新發(fā)起請(qǐng)求 后面的回調(diào)函數(shù), 是關(guān)閉下路刷新的彈窗(這個(gè)只能手動(dòng)關(guān)閉)this.getGoodsList(() => uni.stopPullDownRefresh()) }
  • 修改 getGoodsList 函數(shù),接收 cb 回調(diào)函數(shù)并按需進(jìn)行調(diào)用:
  • // 獲取商品列表數(shù)據(jù)的方法 async getGoodsList(cb) {this.isloading = trueconst { data: res } = await uni.$http.get('/api/public/v1/goods/search', this.queryObj)this.isloading = false// 只要數(shù)據(jù)請(qǐng)求完畢,就立即按需調(diào)用 cb 回調(diào)函數(shù) (這個(gè)代碼是表示, 必須要有 cb 才會(huì)去執(zhí)行 cb() 這個(gè)回調(diào)函數(shù))cb && cb()if (res.meta.status !== 200) return uni.$showMsg()this.goodsList = [...this.goodsList, ...res.message.goods]this.total = res.message.total }

    1.20 點(diǎn)擊商品 item 項(xiàng)跳轉(zhuǎn)到詳情頁(yè)面

  • 將循環(huán)時(shí)的 block 組件修改為 view 組件,并綁定 click 點(diǎn)擊事件處理函數(shù):
  • <view class="goods-list"><view v-for="(item, i) in goodsList" :key="i" @click="gotoDetail(item)"><!-- 為 my-goods 組件動(dòng)態(tài)綁定 goods 屬性的值 --><my-goods :goods="item"></my-goods></view> </view>
  • 在 methods 節(jié)點(diǎn)中,定義 gotoDetail 事件處理函數(shù):
  • // 點(diǎn)擊跳轉(zhuǎn)到商品詳情頁(yè)面 gotoDetail(item) {uni.navigateTo({url: '/subpkg/goods_detail/goods_detail?goods_id=' + item.goods_id}) }

    2.0 商品詳情

    2.1 添加商品詳情頁(yè)的編譯模式

  • 在微信開(kāi)發(fā)者工具中,點(diǎn)擊工具欄上的編譯模式下拉菜單,選擇 添加編譯模式 選項(xiàng):
  • 勾選 啟動(dòng)頁(yè)面 的路徑,并填寫(xiě)了 啟動(dòng)參數(shù) 之后,點(diǎn)擊 確定 按鈕,添加詳情頁(yè)面的編譯模式:
  • 2.2 獲取商品詳情數(shù)據(jù)

  • 在 data 中定義商品詳情的數(shù)據(jù)節(jié)點(diǎn):
  • data() {return {// 商品詳情對(duì)象goods_info: {}} }
  • 在 onLoad 中獲取商品的 Id,并調(diào)用請(qǐng)求商品詳情的方法:
  • onLoad(options) {// 獲取商品 Idconst goods_id = options.goods_id// 調(diào)用請(qǐng)求商品詳情數(shù)據(jù)的方法this.getGoodsDetail(goods_id) }
  • 在 methods 中聲明 getGoodsDetail 方法:
  • methods: {// 定義請(qǐng)求商品詳情數(shù)據(jù)的方法async getGoodsDetail(goods_id) {const { data: res } = await uni.$http.get('/api/public/v1/goods/detail', { goods_id })if (res.meta.status !== 200) return uni.$showMsg()// 為 data 中的數(shù)據(jù)賦值this.goods_info = res.message} }

    2.3 渲染商品詳情頁(yè)的 UI 結(jié)構(gòu)

    2.31 渲染輪播圖區(qū)域

  • 使用 v-for 指令,循環(huán)渲染如下的輪播圖 UI 結(jié)構(gòu):
  • <!-- 輪播圖區(qū)域 --> <swiper :indicator-dots="true" :autoplay="true" :interval="3000" :duration="1000" :circular="true"><swiper-item v-for="(item, i) in goods_info.pics" :key="i"><image :src="item.pics_big"></image></swiper-item> </swiper>
  • 美化輪播圖的樣式:
  • swiper {height: 750rpx;image {width: 100%;height: 100%;} }

    2.32 實(shí)現(xiàn)輪播圖預(yù)覽效果

  • 為輪播圖中的 image 圖片綁定 click 事件處理函數(shù):
  • <swiper-item v-for="(item, i) in goods_info.pics" :key="i"><!-- 把當(dāng)前點(diǎn)擊的圖片的索引,傳遞到 preview() 處理函數(shù)中 --><image :src="item.pics_big" @click="preview(i)"></image> </swiper-item>
  • 在 methods 中定義 preview 事件處理函數(shù):
  • // 實(shí)現(xiàn)輪播圖的預(yù)覽效果 preview(i) {// 調(diào)用 uni.previewImage() 方法預(yù)覽圖片uni.previewImage({// 預(yù)覽時(shí),默認(rèn)顯示圖片的索引current: i,// 所有圖片 url 地址的數(shù)組urls: this.goods_info.pics.map(x => x.pics_big)}) }

    2.33 渲染商品信息區(qū)域

  • 定義商品信息區(qū)域的 UI 結(jié)構(gòu)如下:
  • <!-- 商品信息區(qū)域 --> <view class="goods-info-box"><!-- 商品價(jià)格 --><view class="price">{{goods_info.goods_price}}</view><!-- 信息主體區(qū)域 --><view class="goods-info-body"><!-- 商品名稱(chēng) --><view class="goods-name">{{goods_info.goods_name}}</view><!-- 收藏 --><view class="favi"><uni-icons type="star" size="18" color="gray"></uni-icons><text>收藏</text></view></view><!-- 運(yùn)費(fèi) --><view class="yf">快遞:免運(yùn)費(fèi)</view> </view>
  • 美化商品信息區(qū)域的樣式:
  • // 商品信息區(qū)域的樣式 .goods-info-box {padding: 10px;padding-right: 0;.price {color: #c00000;font-size: 18px;margin: 10px 0;}.goods-info-body {display: flex;justify-content: space-between;.goods-name {font-size: 13px;padding-right: 10px;}// 收藏區(qū)域.favi {width: 120px;font-size: 12px;display: flex;flex-direction: column;justify-content: center;align-items: center;border-left: 1px solid #efefef;color: gray;}}// 運(yùn)費(fèi).yf {margin: 10px 0;font-size: 12px;color: gray;} }

    2.34 渲染商品詳情信息

  • 在頁(yè)面結(jié)構(gòu)中,使用 rich-text 組件,將帶有 HTML 標(biāo)簽的內(nèi)容,渲染為小程序的頁(yè)面結(jié)構(gòu):
  • <!-- 商品詳情信息 --> <rich-text :nodes="goods_info.goods_introduce"></rich-text>
  • 修改 getGoodsDetail 方法,從而解決圖片底部 空白間隙 的問(wèn)題:
  • // 定義請(qǐng)求商品詳情數(shù)據(jù)的方法 async getGoodsDetail(goods_id) {const { data: res } = await uni.$http.get('/api/public/v1/goods/detail', { goods_id })if (res.meta.status !== 200) return uni.$showMsg()// 使用字符串的 replace() 方法,為 img 標(biāo)簽添加行內(nèi)的 style 樣式,從而解決圖片底部空白間隙的問(wèn)題res.message.goods_introduce = res.message.goods_introduce.replace(/<img /g, '<img style="display:block;" ')this.goods_info = res.message }
  • 解決 .webp 格式圖片在 ios 設(shè)備上無(wú)法正常顯示的問(wèn)題:
  • // 定義請(qǐng)求商品詳情數(shù)據(jù)的方法 async getGoodsDetail(goods_id) {const { data: res } = await uni.$http.get('/api/public/v1/goods/detail', { goods_id })if (res.meta.status !== 200) return uni.$showMsg()// 使用字符串的 replace() 方法,將 webp 的后綴名替換為 jpg 的后綴名res.message.goods_introduce = res.message.goods_introduce.replace(/<img /g, '<img style="display:block;" ').replace(/webp/g, 'jpg')this.goods_info = res.message }

    3.35 解決商品價(jià)格閃爍的問(wèn)題

  • 導(dǎo)致問(wèn)題的原因:在商品詳情數(shù)據(jù)請(qǐng)求回來(lái)之前,data 中 goods_info 的值為 { },因此初次渲染頁(yè)面時(shí),會(huì)導(dǎo)致 商品價(jià)格、商品名稱(chēng) 等閃爍的問(wèn)題。

  • 解決方案:判斷 goods_info.goods_name 屬性的值是否存在,從而使用 v-if 指令控制頁(yè)面的顯示與隱藏:

  • <template><view v-if="goods_info.goods_name"><!-- 省略其它代碼 --></view> </template>

    3.4 渲染詳情頁(yè)底部的商品導(dǎo)航區(qū)域

    3.41 渲染商品導(dǎo)航區(qū)域的 UI 結(jié)構(gòu)

    基于 uni-ui 提供的 GoodsNav 組件來(lái)實(shí)現(xiàn)商品導(dǎo)航區(qū)域的效果

  • 在 data 中,通過(guò) options 和 buttonGroup 兩個(gè)數(shù)組,來(lái)聲明商品導(dǎo)航組件的按鈕配置對(duì)象:
  • data() {return {// 商品詳情對(duì)象goods_info: {},// 左側(cè)按鈕組的配置對(duì)象options: [{icon: 'shop',text: '店鋪'}, {icon: 'cart',text: '購(gòu)物車(chē)',info: 2}],// 右側(cè)按鈕組的配置對(duì)象buttonGroup: [{text: '加入購(gòu)物車(chē)',backgroundColor: '#ff0000',color: '#fff'},{text: '立即購(gòu)買(mǎi)',backgroundColor: '#ffa200',color: '#fff'}]} }
  • 在頁(yè)面中使用 uni-goods-nav 商品導(dǎo)航組件:
  • <!-- 商品導(dǎo)航組件 --> <view class="goods_nav"><!-- fill 控制右側(cè)按鈕的樣式 --><!-- options 左側(cè)按鈕的配置項(xiàng) --><!-- buttonGroup 右側(cè)按鈕的配置項(xiàng) --><!-- click 左側(cè)按鈕的點(diǎn)擊事件處理函數(shù) --><!-- buttonClick 右側(cè)按鈕的點(diǎn)擊事件處理函數(shù) --><uni-goods-nav :fill="true" :options="options" :buttonGroup="buttonGroup" @click="onClick" @buttonClick="buttonClick" /> </view>
  • 美化商品導(dǎo)航組件,使之固定在頁(yè)面最底部:
  • .goods-detail-container {// 給頁(yè)面外層的容器,添加 50px 的內(nèi)padding,// 防止頁(yè)面內(nèi)容被底部的商品導(dǎo)航組件遮蓋padding-bottom: 50px; }.goods_nav {// 為商品導(dǎo)航組件添加固定定位position: fixed;bottom: 0;left: 0;width: 100%; }

    3.4.2 點(diǎn)擊跳轉(zhuǎn)到購(gòu)物車(chē)頁(yè)面

  • 點(diǎn)擊商品導(dǎo)航組件左側(cè)的按鈕,會(huì)觸發(fā) uni-goods-nav 的 @click 事件處理函數(shù),事件對(duì)象 e 中會(huì)包含當(dāng)前點(diǎn)擊的按鈕相關(guān)的信息:
  • // 左側(cè)按鈕的點(diǎn)擊事件處理函數(shù) onClick(e) {console.log(e) }
  • 根據(jù) e.content.text 的值,來(lái)決定進(jìn)一步的操作:
  • // 左側(cè)按鈕的點(diǎn)擊事件處理函數(shù) onClick(e) {if (e.content.text === '購(gòu)物車(chē)') {// 切換到購(gòu)物車(chē)頁(yè)面uni.switchTab({url: '/pages/cart/cart'})} }

    4.0 加入購(gòu)物車(chē)

    4.1 配置 vuex

  • 在項(xiàng)目根目錄中創(chuàng)建 store 文件夾,專(zhuān)門(mén)用來(lái)存放 vuex 相關(guān)的模塊
  • 在 store 目錄上鼠標(biāo)右鍵,選擇 新建 -> js文件,新建 store.js 文件:
  • 在 store.js 中按照如下 4 個(gè)步驟初始化 Store 的實(shí)例對(duì)象:
  • // 1. 導(dǎo)入 Vue 和 Vuex import Vue from 'vue' import Vuex from 'vuex'// 2. 將 Vuex 安裝為 Vue 的插件 Vue.use(Vuex)// 3. 創(chuàng)建 Store 的實(shí)例對(duì)象 const store = new Vuex.Store({// TODO:掛載 store 模塊modules: {}, })// 4. 向外共享 Store 的實(shí)例對(duì)象 export default store
  • 在 main.js 中導(dǎo)入 store 實(shí)例對(duì)象并掛載到 Vue 的實(shí)例上:
  • // 1. 導(dǎo)入 store 的實(shí)例對(duì)象 import store from './store/store.js'// 省略其它代碼...const app = new Vue({...App,// 2. 將 store 掛載到 Vue 實(shí)例上store, }) app.$mount()

    4.2 創(chuàng)建購(gòu)物車(chē)的 store 模塊

  • 在 store 目錄上鼠標(biāo)右鍵,選擇 新建 -> js文件,創(chuàng)建購(gòu)物車(chē)的 store 模塊,命名為 cart.js:
  • 在 cart.js 中,初始化如下的 vuex 模塊:
  • export default {// 為當(dāng)前模塊開(kāi)啟命名空間namespaced: true,// 模塊的 state 數(shù)據(jù)state: () => ({// 購(gòu)物車(chē)的數(shù)組,用來(lái)存儲(chǔ)購(gòu)物車(chē)中每個(gè)商品的信息對(duì)象// 每個(gè)商品的信息對(duì)象,都包含如下 6 個(gè)屬性:// { goods_id, goods_name, goods_price, goods_count, goods_small_logo, goods_state }cart: [],}),// 模塊的 mutations 方法mutations: {},// 模塊的 getters 屬性getters: {}, }
  • store/store.js 模塊中,導(dǎo)入并掛載購(gòu)物車(chē)的 vuex 模塊,示例代碼如下:
  • import Vue from 'vue' import Vuex from 'vuex' // 1. 導(dǎo)入購(gòu)物車(chē)的 vuex 模塊 import moduleCart from './cart.js'Vue.use(Vuex)const store = new Vuex.Store({// TODO:掛載 store 模塊modules: {// 2. 掛載購(gòu)物車(chē)的 vuex 模塊,模塊內(nèi)成員的訪問(wèn)路徑被調(diào)整為 m_cart,例如:// 購(gòu)物車(chē)模塊中 cart 數(shù)組的訪問(wèn)路徑是 m_cart/cartm_cart: moduleCart,}, })export default store

    4.3 在商品詳情頁(yè)中使用 Store 中的數(shù)據(jù)

  • 在 goods_detail.vue 頁(yè)面中,修改 標(biāo)簽中的代碼如下:
  • // 從 vuex 中按需導(dǎo)出 mapState 輔助方法 import { mapState } from 'vuex'export default {computed: {// 調(diào)用 mapState 方法,把 m_cart 模塊中的 cart 數(shù)組映射到當(dāng)前頁(yè)面中,作為計(jì)算屬性來(lái)使用// ...mapState('模塊的名稱(chēng)', ['要映射的數(shù)據(jù)名稱(chēng)1', '要映射的數(shù)據(jù)名稱(chēng)2'])...mapState('m_cart', ['cart']),},// 省略其它代碼... }

    注意:今后無(wú)論映射 mutations 方法,還是 getters 屬性,還是 state 中的數(shù)據(jù),都需要指定模塊的名稱(chēng),才能進(jìn)行映射。

  • 在頁(yè)面渲染時(shí),可以直接使用映射過(guò)來(lái)的數(shù)據(jù),例如:
  • <!-- 運(yùn)費(fèi) --> <view class="yf">快遞:免運(yùn)費(fèi) -- {{cart.length}}</view>

    8.4 實(shí)現(xiàn)加入購(gòu)物車(chē)的功能

  • 在 store 目錄下的 cart.js 模塊中,封裝一個(gè)將商品信息加入購(gòu)物車(chē)的 mutations 方法,命名為 addToCart。示例代碼如下:
  • export default {// 為當(dāng)前模塊開(kāi)啟命名空間namespaced: true,// 模塊的 state 數(shù)據(jù)state: () => ({// 購(gòu)物車(chē)的數(shù)組,用來(lái)存儲(chǔ)購(gòu)物車(chē)中每個(gè)商品的信息對(duì)象// 每個(gè)商品的信息對(duì)象,都包含如下 6 個(gè)屬性:// { goods_id, goods_name, goods_price, goods_count, goods_small_logo, goods_state }cart: [],}),// 模塊的 mutations 方法mutations: {addToCart(state, goods) {// 根據(jù)提交的商品的Id,查詢(xún)購(gòu)物車(chē)中是否存在這件商品// 如果不存在,則 findResult 為 undefined;否則,為查找到的商品信息對(duì)象const findResult = state.cart.find((x) => x.goods_id === goods.goods_id)if (!findResult) {// 如果購(gòu)物車(chē)中沒(méi)有這件商品,則直接 pushstate.cart.push(goods)} else {// 如果購(gòu)物車(chē)中有這件商品,則只更新數(shù)量即可findResult.goods_count++}},},// 模塊的 getters 屬性getters: {}, }
  • 在商品詳情頁(yè)面中,通過(guò) mapMutations 這個(gè)輔助方法,把 vuex 中 m_cart 模塊下的 addToCart 方法映射到當(dāng)前頁(yè)面:
  • // 按需導(dǎo)入 mapMutations 這個(gè)輔助方法 import { mapMutations } from 'vuex'export default {methods: {// 把 m_cart 模塊中的 addToCart 方法映射到當(dāng)前頁(yè)面使用...mapMutations('m_cart', ['addToCart']),}, }
  • 為商品導(dǎo)航組件 uni-goods-nav 綁定 @buttonClick=“buttonClick” 事件處理函數(shù):
  • // 右側(cè)按鈕的點(diǎn)擊事件處理函數(shù) buttonClick(e) {// 1. 判斷是否點(diǎn)擊了 加入購(gòu)物車(chē) 按鈕if (e.content.text === '加入購(gòu)物車(chē)') {// 2. 組織一個(gè)商品的信息對(duì)象const goods = {goods_id: this.goods_info.goods_id, // 商品的Idgoods_name: this.goods_info.goods_name, // 商品的名稱(chēng)goods_price: this.goods_info.goods_price, // 商品的價(jià)格goods_count: 1, // 商品的數(shù)量goods_small_logo: this.goods_info.goods_small_logo, // 商品的圖片goods_state: true // 商品的勾選狀態(tài)}// 3. 通過(guò) this 調(diào)用映射過(guò)來(lái)的 addToCart 方法,把商品信息對(duì)象存儲(chǔ)到購(gòu)物車(chē)中this.addToCart(goods)} }

    8.5 動(dòng)態(tài)統(tǒng)計(jì)購(gòu)物車(chē)中商品的總數(shù)量

  • 在 cart.js 模塊中,在 getters 節(jié)點(diǎn)下定義一個(gè) total 方法,用來(lái)統(tǒng)計(jì)購(gòu)物車(chē)中商品的總數(shù)量:
  • // 模塊的 getters 屬性 getters: {// 統(tǒng)計(jì)購(gòu)物車(chē)中商品的總數(shù)量total(state) {let c = 0// 循環(huán)統(tǒng)計(jì)商品的數(shù)量,累加到變量 c 中state.cart.forEach(goods => c += goods.goods_count)return c} }
  • 在商品詳情頁(yè)面的 script 標(biāo)簽中,按需導(dǎo)入 mapGetters 方法并進(jìn)行使用:
  • // 按需導(dǎo)入 mapGetters 這個(gè)輔助方法 import { mapGetters } from 'vuex'export default {computed: {// 把 m_cart 模塊中名稱(chēng)為 total 的 getter 映射到當(dāng)前頁(yè)面中使用...mapGetters('m_cart', ['total']),}, }
  • 通過(guò) watch 偵聽(tīng)器,監(jiān)聽(tīng)計(jì)算屬性 total 值的變化,從而動(dòng)態(tài)為購(gòu)物車(chē)按鈕的徽標(biāo)賦值:
  • export default {watch: {// 1. 監(jiān)聽(tīng) total 值的變化,通過(guò)第一個(gè)形參得到變化后的新值total(newVal) {// 2. 通過(guò)數(shù)組的 find() 方法,找到購(gòu)物車(chē)按鈕的配置對(duì)象const findResult = this.options.find((x) => x.text === '購(gòu)物車(chē)')if (findResult) {// 3. 動(dòng)態(tài)為購(gòu)物車(chē)按鈕的 info 屬性賦值findResult.info = newVal}},}, }

    8.6 持久化存儲(chǔ)購(gòu)物車(chē)中的商品

  • 在 cart.js 模塊中,聲明一個(gè)叫做 saveToStoragemutations 方法,此方法負(fù)責(zé)將購(gòu)物車(chē)中的數(shù)據(jù)持久化存儲(chǔ)到本地:
  • // 將購(gòu)物車(chē)中的數(shù)據(jù)持久化存儲(chǔ)到本地 saveToStorage(state) {uni.setStorageSync('cart', JSON.stringify(state.cart)) }
  • 修改 mutations 節(jié)點(diǎn)中的 addToCart 方法,在處理完商品信息后,調(diào)用步驟 1 中定義的 saveToStorage 方法:
  • addToCart(state, goods) {// 根據(jù)提交的商品的Id,查詢(xún)購(gòu)物車(chē)中是否存在這件商品// 如果不存在,則 findResult 為 undefined;否則,為查找到的商品信息對(duì)象const findResult = state.cart.find(x => x.goods_id === goods.goods_id)if (!findResult) {// 如果購(gòu)物車(chē)中沒(méi)有這件商品,則直接 pushstate.cart.push(goods)} else {// 如果購(gòu)物車(chē)中有這件商品,則只更新數(shù)量即可findResult.goods_count++}// 通過(guò) commit 方法,調(diào)用 m_cart 命名空間下的 saveToStorage 方法this.commit('m_cart/saveToStorage') }
  • 修改 cart.js 模塊中的 state 函數(shù),讀取本地存儲(chǔ)的購(gòu)物車(chē)數(shù)據(jù),對(duì) cart 數(shù)組進(jìn)行初始化:
  • // 模塊的 state 數(shù)據(jù) state: () => ({// 購(gòu)物車(chē)的數(shù)組,用來(lái)存儲(chǔ)購(gòu)物車(chē)中每個(gè)商品的信息對(duì)象// 每個(gè)商品的信息對(duì)象,都包含如下 6 個(gè)屬性:// { goods_id, goods_name, goods_price, goods_count, goods_small_logo, goods_state }cart: JSON.parse(uni.getStorageSync('cart') || '[]') }),

    8.7 優(yōu)化商品詳情頁(yè)的 total 偵聽(tīng)器

  • 使用普通函數(shù)的形式定義的 watch 偵聽(tīng)器,在頁(yè)面首次加載后不會(huì)被調(diào)用。因此導(dǎo)致了商品詳情頁(yè)在首次加載完畢之后,不會(huì)將商品的總數(shù)量顯示到商品導(dǎo)航區(qū)域:
  • watch: {// 頁(yè)面首次加載完畢后,不會(huì)調(diào)用這個(gè)偵聽(tīng)器total(newVal) {const findResult = this.options.find(x => x.text === '購(gòu)物車(chē)')if (findResult) {findResult.info = newVal}} }
  • 為了防止這個(gè)上述問(wèn)題,可以使用對(duì)象的形式來(lái)定義 watch 偵聽(tīng)器(詳細(xì)文檔請(qǐng)參考 Vue 官方的 watch 偵聽(tīng)器教程),示例代碼如下:
  • watch: {// 定義 total 偵聽(tīng)器,指向一個(gè)配置對(duì)象total: {// handler 屬性用來(lái)定義偵聽(tīng)器的 function 處理函數(shù)handler(newVal) {const findResult = this.options.find(x => x.text === '購(gòu)物車(chē)')if (findResult) {findResult.info = newVal}},// immediate 屬性用來(lái)聲明此偵聽(tīng)器,是否在頁(yè)面初次加載完畢后立即調(diào)用immediate: true} }

    8.8 動(dòng)態(tài)為 tabBar 頁(yè)面設(shè)置數(shù)字徽標(biāo)

    需求描述:從商品詳情頁(yè)面導(dǎo)航到購(gòu)物車(chē)頁(yè)面之后,需要為 tabBar 中的購(gòu)物車(chē)動(dòng)態(tài)設(shè)置數(shù)字徽標(biāo)。

  • 把 Store 中的 total 映射到 cart.vue 中使用:
  • // 按需導(dǎo)入 mapGetters 這個(gè)輔助方法 import { mapGetters } from 'vuex'export default {data() {return {}},computed: {// 將 m_cart 模塊中的 total 映射為當(dāng)前頁(yè)面的計(jì)算屬性...mapGetters('m_cart', ['total']),}, }
  • 在頁(yè)面剛顯示出來(lái)的時(shí)候,立即調(diào)用 setBadge 方法,為 tabBar 設(shè)置數(shù)字徽標(biāo):
  • onShow() {// 在頁(yè)面剛展示的時(shí)候,設(shè)置數(shù)字徽標(biāo)this.setBadge() }
  • 在 methods 節(jié)點(diǎn)中,聲明 setBadge 方法如下,通過(guò) uni.setTabBarBadge() 為 tabBar 設(shè)置數(shù)字徽標(biāo):
  • methods: {setBadge() {// 調(diào)用 uni.setTabBarBadge() 方法,為購(gòu)物車(chē)設(shè)置右上角的徽標(biāo)uni.setTabBarBadge({index: 2, // 索引text: this.total + '' // 注意:text 的值必須是字符串,不能是數(shù)字})} }

    8.9 將設(shè)置 tabBar 徽標(biāo)的代碼抽離為 mixins

    注意:除了要在 cart.vue 頁(yè)面中設(shè)置購(gòu)物車(chē)的數(shù)字徽標(biāo),還需要在其它 3 個(gè) tabBar 頁(yè)面中,為購(gòu)物車(chē)設(shè)置數(shù)字徽標(biāo)。

    此時(shí)可以使用 Vue 提供的 mixins 特性,提高代碼的可維護(hù)性。

  • 在項(xiàng)目根目錄中新建 mixins 文件夾,并在 mixins 文件夾之下新建 tabbar-badge.js 文件,用來(lái)把設(shè)置 tabBar 徽標(biāo)的代碼封裝為一個(gè) mixin 文件:
  • import { mapGetters } from 'vuex'// 導(dǎo)出一個(gè) mixin 對(duì)象 export default {computed: {...mapGetters('m_cart', ['total']),},onShow() {// 在頁(yè)面剛展示的時(shí)候,設(shè)置數(shù)字徽標(biāo)this.setBadge()},methods: {setBadge() {// 調(diào)用 uni.setTabBarBadge() 方法,為購(gòu)物車(chē)設(shè)置右上角的徽標(biāo)uni.setTabBarBadge({index: 2,text: this.total + '', // 注意:text 的值必須是字符串,不能是數(shù)字})},}, }
  • 修改 home.vue,cate.vue,cart.vue,my.vue 這 4 個(gè) tabBar 頁(yè)面的源代碼,分別導(dǎo)入 @/mixins/tabbar-badge.js 模塊并進(jìn)行使用:
  • // 導(dǎo)入自己封裝的 mixin 模塊 import badgeMix from '@/mixins/tabbar-badge.js'export default {// 將 badgeMix 混入到當(dāng)前的頁(yè)面中進(jìn)行使用mixins: [badgeMix],// 省略其它代碼... }

    總結(jié)

    以上是生活随笔為你收集整理的uni-app 小程序项目三 1. 商品列表、过滤器、封装商品item组件、上拉加载、节流阀、下拉刷新、2. 商品详情、轮播图、商品价格闪烁问题 3.加入购物车、vuex、持久化存储、mixiins的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    四虎成人精品永久免费av九九 | 三上悠亚一区二区在线观看 | 91色偷偷| 91精品久久久久久综合乱菊 | 国产精品资源网 | av天天干 | 国产在线不卡 | 国产性天天综合网 | av在线免费观看不卡 | 久久久久婷 | 国产精品一区二区三区视频免费 | 国产特级毛片aaaaaa | 手机看片国产日韩 | 日韩精品免费 | 亚洲激情校园春色 | 国产乱视频 | 日本色小说视频 | 日韩有码网站 | 成人久久亚洲 | 亚洲国产精品久久久 | 国产精品久久久久久久久免费 | 天天干,天天草 | 日本爱爱免费视频 | 福利一区在线视频 | 国产91全国探花系列在线播放 | 伊人久久五月天 | 国产美女在线免费观看 | 最新国产在线视频 | 91成人精品一区在线播放69 | 久久免费视频一区 | 色噜噜在线观看视频 | 东方av在线免费观看 | 久久少妇免费视频 | 亚洲激情p| 中文字幕在线观看免费 | avcom在线 | 国产玖玖在线 | 人人草人人草 | av在线电影网站 | 91视频高清完整版 | 在线视频一二区 | 91精品亚洲影视在线观看 | 狠狠干激情 | 亚洲成人资源 | 欧美国产日韩激情 | 亚洲资源网| 不卡国产在线 | 国产精品激情 | 日本特黄一级 | 美女黄频免费 | 国产日韩欧美中文 | 欧美大片aaa| 久久99婷婷 | 国产免费xvideos视频入口 | 热久久这里只有精品 | 人人看人人 | 91视频免费看网站 | 黄网站www | 日韩欧美亚州 | 美国av大片| 婷婷久久五月天 | 日批网站在线观看 | 91视频久久久 | 九色琪琪久久综合网天天 | 日韩精品电影在线播放 | 久久无码精品一区二区三区 | 超碰人人国产 | 国产亚洲精品成人av久久ww | 蜜臀久久99静品久久久久久 | 久草视频在线免费播放 | 国产色爽 | 国产欧美精品一区二区三区 | 日韩中文字幕免费 | 黄色av电影免费观看 | 成人毛片久久 | www久草 | 国产资源免费 | 一区 在线观看 | 久艹在线播放 | 福利视频| 黄污视频大全 | 99精品国产高清在线观看 | 日韩和的一区二在线 | 好看av在线 | 欧美性生爱 | 国产精品专区h在线观看 | 日韩草比 | 国产麻豆果冻传媒在线观看 | 午夜精品三区 | 天天草天天操 | 亚洲影视资源 | 日韩精品中文字幕在线播放 | 国产成人一区二区三区在线观看 | 高清av免费看| 激情综合色图 | 日本中文字幕视频 | 中文字幕国产一区 | 夜夜视频资源 | 午夜精品99久久免费 | 丁香五月亚洲综合在线 | 久久人网| www.在线观看av | 国产偷国产偷亚洲清高 | 成年人在线视频观看 | 免费在线观看不卡av | 久草青青在线观看 | 国产精品伦一区二区三区视频 | 网站你懂的| 久久伦理网 | 国产精品女 | 久久久久综合精品福利啪啪 | 欧美成人在线免费观看 | 一区二区三区 中文字幕 | 国产一级视频 | 国产高清不卡av | av软件在线观看 | 国产高清 不卡 | 狂野欧美激情性xxxx | 四虎免费av| 国产精品视频99 | 国产1区2区3区在线 亚洲自拍偷拍色图 | 久久成人精品电影 | 国产999精品久久久久久绿帽 | 四虎永久网站 | 91精彩在线视频 | 91免费在线| av在线不卡观看 | 激情伊人五月天 | 日韩精品免费一区二区在线观看 | 国产特黄色片 | 亚洲国产字幕 | 国产超碰在线 | 国产香蕉97碰碰碰视频在线观看 | 国产一区视频在线播放 | 久久久免费精品国产一区二区 | 青青网视频 | 色视频成人在线观看免 | 国产99久久九九精品免费 | 麻豆视传媒官网免费观看 | 日韩欧在线| 国产xx在线| 久久综合久久综合这里只有精品 | 日本公乱妇视频 | a资源在线 | 日韩欧美国产免费播放 | 国产va在线 | 日韩视频免费在线观看 | 五月激情婷婷丁香 | 亚洲日韩欧美视频 | 久久五月精品 | 一区二区视频在线免费观看 | 精品国产成人在线影院 | 欧美性色综合网 | 中文字幕人成一区 | 天天操天天干天天玩 | 国产区第一页 | 亚洲欧美视频网站 | 亚洲精品在线电影 | 欧美成人影音 | 涩涩资源网 | 日韩色高清 | 国产精品一区二区av日韩在线 | 91精品久久久久久综合乱菊 | 欧美aaaxxxx做受视频 | 久久国产精品第一页 | 日韩av视屏 | 精品视频一区在线观看 | 99久久超碰中文字幕伊人 | 中文字幕在线观看三区 | 日韩理论电影网 | 日本高清dvd | 久久草视频 | 国产精品男女视频 | 性色av一区二区三区在线观看 | 丁香六月国产 | 婷婷综合成人 | 国产一级片视频 | 日韩 在线| 91大神视频网站 | 日韩欧美一区二区三区在线 | 亚洲精品中文字幕在线观看 | 国模一区二区三区四区 | 亚洲成人家庭影院 | 欧美日韩观看 | 91精品电影 | 成人免费看黄 | 天天操天天操天天操天天操 | 国产99久久九九精品 | 天海翼一区二区三区免费 | 在线观看免费版高清版 | 精品电影一区二区 | 亚洲,国产成人av | 中文字幕在线观看第二页 | 欧美另类v | 免费国产ww | 日韩av成人在线观看 | 国产99久久久欧美黑人 | av免费高清观看 | 人人爽久久涩噜噜噜网站 | 久久不见久久见免费影院 | 综合激情网... | 成人a视频在线观看 | 黄色软件在线看 | bbb搡bbb爽爽爽 | 婷婷六月天综合 | 五月宗合网 | 午夜久久久精品 | 欧美黄色软件 | 婷婷九月丁香 | 久99久在线视频 | 国产精品久久久久久久久久东京 | .精品久久久麻豆国产精品 亚洲va欧美 | 成人免费影院 | 性色视频在线 | www视频在线免费观看 | 国产黄色美女 | 91av电影在线 | 96精品在线 | 亚洲欧美日韩在线看 | 国产色a在线观看 | 狠狠色丁香 | 在线免费看黄色 | 91精品成人 | 国产麻豆果冻传媒在线观看 | 天天操夜夜曰 | 色综合久久五月 | 国产精品麻豆免费版 | 二区三区中文字幕 | 九九久久久久久久久激情 | 亚洲一级免费观看 | 99热精品国产一区二区在线观看 | 国产精品一区二区免费在线观看 | 91少妇精拍在线播放 | 国产日韩视频在线 | 91xav| 91在线麻豆 | 亚洲精选久久 | 91av在线电影| 中文字幕在线视频免费播放 | 美女av免费看| 久久国产精品一二三区 | 国产精品久久久久久久久久直播 | 一本一道久久a久久综合蜜桃 | 久久精品在线视频 | 国产福利电影网址 | 国产视频欧美视频 | 国产精品99久久免费黑人 | 亚洲麻豆精品 | 婷婷亚洲激情 | 国产黄色精品在线 | 国产视频在线观看一区 | 免费午夜网站 | 中文字幕的 | 久久久影片 | 精品一区电影 | 日本字幕网 | 午夜成人免费电影 | 久久99亚洲网美利坚合众国 | 中文字幕国语官网在线视频 | 亚洲理论视频 | 在线观看中文字幕一区 | 超碰97人人射妻 | 91亚色在线观看 | 中文永久免费观看 | 婷婷狠狠操 | 特级西西www44高清大胆图片 | 午夜免费电影院 | 波多野结衣电影一区二区 | 成人黄色毛片 | 国产青青青 | 中文字幕在线专区 | 成人精品电影 | 亚洲国产成人久久综合 | 黄色官网在线观看 | 成人在线播放av | 亚洲国产资源 | 国产精品大片在线观看 | 日韩欧美视频在线 | 在线免费观看成人 | 国产高清视频在线播放 | 91视频观看免费 | 亚洲欧洲中文日韩久久av乱码 | 亚洲国产视频网站 | 69精品| 久久精品免费播放 | 热久久这里只有精品 | www.97色.com | 欧美精品免费在线 | 色94色欧美 | 亚洲精品午夜久久久久久久 | 西西www4444大胆视频 | 日韩视频专区 | www.夜夜夜 | 在线观看免费av网 | 欧美日韩在线免费观看视频 | 91成年人网站 | 丁香婷婷在线观看 | 97精品视频在线播放 | 日韩在线高清免费视频 | 国产精品福利在线观看 | 一区二区欧美激情 | 日韩精品一区二区三区中文字幕 | 久久伊人精品一区二区三区 | 99在线观看视频 | 亚洲免费观看在线视频 | 国产精品久久久久久a | www日韩| 欧美资源 | 色婷婷国产精品 | 99免费观看视频 | 久久精品视频网站 | 日韩在线短视频 | 国产99爱 | 久久久毛片 | 五月天色丁香 | 免费黄色在线网址 | 国产精品99精品 | 国产原创中文在线 | 亚洲天天干 | 五月激情久久 | 成人av在线观 | 欧洲一区二区三区精品 | 国产精品午夜久久久久久99热 | 免费一级片视频 | 五月天激情在线 | 亚洲黄色激情小说 | 久久久国产一区二区三区四区小说 | 91香蕉国产在线观看软件 | 久久久久亚洲精品国产 | 成人一级电影在线观看 | 国产精久久久久久久 | 91爱看片 | 91精品少妇偷拍99 | 一区二区三区动漫 | 国产高清不卡在线 | 99热在线这里只有精品 | 高清免费在线视频 | 成人9ⅰ免费影视网站 | 六月色丁香| 99超碰在线观看 | 国产精品女教师 | av三级在线免费观看 | 黄色成人91 | 91大神免费视频 | 丁香六月色 | 日本精品一区二区三区在线观看 | 久久婷婷视频 | 99热在线网站 | 免费精品在线观看 | 日本黄色免费播放 | 欧美精品三级 | av片中文| 国产系列精品av | 天天摸天天操天天舔 | 中文字幕色综合网 | 五月激情丁香图片 | 日本久久久久 | 天天摸天天操天天爽 | 国产 日韩 欧美 自拍 | 五月天中文在线 | 久久久精品 一区二区三区 国产99视频在线观看 | 国产日韩三级 | 九九热免费视频在线观看 | 国产成人一区二区三区电影 | 欧美国产精品一区二区 | 国产成人在线观看免费 | 在线中文视频 | 天天综合五月天 | 欧美专区日韩专区 | 依人成人综合网 | 日韩免费一区 | 亚洲做受高潮欧美裸体 | 色婷婷精品大在线视频 | 国产色a在线观看 | 国产视频欧美视频 | 一区二区不卡高清 | 久久夜夜操 | 亚洲一级影院 | 91视频国产高清 | 国产精品精品视频 | 日韩精品视频在线免费观看 | 午夜少妇一区二区三区 | 超碰免费av | 国产精品视频全国免费观看 | 亚洲综合在线播放 | 久久伊人精品一区二区三区 | 午夜影视一区 | 亚洲成人家庭影院 | 国产精品一区二区无线 | 婷婷在线资源 | av在线免费播放网站 | 国产一级三级 | 91桃色免费观看 | 国产乱视频| 97视频网址| 天天色综合1 | 国产日韩视频在线播放 | 99在线视频精品 | 五月婷婷中文网 | 日韩久久久久久久久久久久 | 97国产| 亚洲成aⅴ人在线观看 | 五月婷婷久 | 青草视频在线免费 | 国产麻豆精品95视频 | 日日干美女 | 国产一级二级三级视频 | av亚洲产国偷v产偷v自拍小说 | 黄色性av| 国产美女久久久 | 日本久久免费电影 | 亚洲国内精品视频 | 欧美一区二区三区在线视频观看 | 国产99久久久国产精品免费二区 | 精品视频免费看 | 亚洲精品h | 欧美三人交 | 免费日韩电影 | 日本久久免费电影 | 精品综合久久 | 国产一区国产精品 | 日韩电影中文字幕在线观看 | 亚洲国产丝袜在线观看 | 91av在| 99久久精品国产免费看不卡 | 草在线视频| 国产第页 | 日韩在线三级 | 亚洲 欧美 日韩 综合 | 黄色一区三区 | 国产五月婷 | 午夜av在线电影 | 国产午夜视频在线观看 | av先锋中文字幕 | 午夜精品久久久久久久99水蜜桃 | 一区二区三区av在线 | 久久官网| 色综合色综合久久综合频道88 | 国产成人精品在线观看 | 国产精品久久久久久久久久白浆 | 国色天香在线观看 | 国产成人精品久久久 | 中文字幕乱码电影 | 国产午夜精品久久久久久久久久 | 婷婷婷国产在线视频 | 国产美女被啪进深处喷白浆视频 | 国产综合婷婷 | 国产成人精品久久久久蜜臀 | 久草视频首页 | 亚洲精品中文在线资源 | 久久激情综合 | 久久综合精品国产一区二区三区 | 黄色小说在线观看视频 | 日韩中文字幕免费在线播放 | 欧美日韩一区二区三区免费视频 | 在线观看黄色小视频 | 欧美尹人 | 香蕉一区 | 国产在线精品播放 | 亚洲黄色免费网站 | 欧美国产日韩一区二区 | 国产中文字幕一区二区 | 在线 欧美 日韩 | 中国黄色一级大片 | 天天干天天看 | 国产成人精品aaa | 久久久久久久久久久久久久电影 | 成人a视频在线观看 | a电影免费看 | 精品国产精品久久一区免费式 | 91香蕉亚洲精品 | 少妇视频一区 | 日韩精品一区二区三区免费视频观看 | 亚洲精品资源在线 | 天天艹天天 | 成人国产综合 | 天堂黄色片| 日韩在线视频不卡 | 99精品乱码国产在线观看 | 97精品一区二区三区 | 一级特黄av | www黄色大片| 青青草国产成人99久久 | 午夜色大片在线观看 | 激情黄色一级片 | 8x成人免费视频 | 国内精品福利视频 | 国产日产精品一区二区三区四区的观看方式 | 97操操操 | 欧美激情视频一二区 | 免费精品人在线二线三线 | 色精品视频 | 国产一区精品在线观看 | 在线看成人av | 日韩中文字幕免费在线播放 | 国产午夜在线观看 | 91色视频 | 热久久国产精品 | 中文字幕高清免费日韩视频在线 | 国产中文字幕视频在线观看 | 日韩免费观看视频 | 三级毛片视频 | 肉色欧美久久久久久久免费看 | 亚洲精品小区久久久久久 | 久久精品综合 | 黄色aaa毛片| 一区二区欧美日韩 | 成人久久久精品国产乱码一区二区 | 精品亚洲午夜久久久久91 | 二区视频在线观看 | 久久色亚洲 | 亚洲一区二区黄色 | 欧美在线一二 | 久久精品在线视频 | 亚洲综合五月天 | 日本三级国产 | 超碰人人超碰 | 亚洲三级黄色 | 久久久久久国产一区二区三区 | 国产在线不卡一区 | 久久五月天色综合 | 91高清视频免费 | 日韩一区二区免费视频 | 久久艹99 | 国产精品美女999 | 国产美女精品 | 天天射天天干天天 | 伊人影院得得 | 久久久久久欧美二区电影网 | 天天色天天操天天爽 | 精品电影一区二区 | 亚洲一区美女视频在线观看免费 | 日韩理论电影在线观看 | 欧美日韩另类视频 | 最新午夜电影 | 大胆欧美gogo免费视频一二区 | 美女网站在线观看 | 四虎在线免费观看 | 亚洲精品成人av在线 | 就要色综合 | 天天插天天爱 | 久久不色 | 国产在线不卡 | 91看片在线免费观看 | 成人资源网 | 欧美日韩一区久久 | 在线日本看片免费人成视久网 | 亚洲女在线 | 欧美一二三视频 | 999视频在线播放 | 美女视频一区二区 | 久久黄色成人 | 视频三区 | 日本精品视频在线 | 色网站中文字幕 | 日韩成人黄色av | 色婷婷综合久久久 | 国产小视频在线看 | 精品久久国产精品 | 免费下载高清毛片 | 最新午夜电影 | 亚洲精品视频偷拍 | 国产一区二区在线免费观看 | 字幕网在线观看 | 亚洲国产精品传媒在线观看 | 亚洲天堂网在线视频观看 | aaa亚洲精品一二三区 | 麻豆精品传媒视频 | 久久久毛片 | 国产精品99久久久精品免费观看 | 丁香婷婷激情国产高清秒播 | 日韩精品久久中文字幕 | 精品视频成人 | av手机在线播放 | 成人a在线观看 | 国语精品久久 | 成人免费视频网址 | 亚洲精品麻豆 | 亚洲综合精品视频 | 色99色 | 99国产视频 | 国产精品国产三级国产不产一地 | 人人爽人人爽人人 | 99精品视频在线播放观看 | 国产一区二区三区久久久 | 91在线播放综合 | 国产中文字幕网 | 日韩欧美在线中文字幕 | 色噜噜噜| 免费激情网 | 精品亚洲一区二区 | 99一级片| 国产99久久九九精品免费 | 欧美一级日韩三级 | 国产精品嫩草影院99网站 | 伊人五月天婷婷 | 成年人免费在线 | 在线观看黄污 | 欧美日韩午夜爽爽 | 中文字幕在线观看的网站 | 欧美日韩亚洲在线观看 | 97视频网站 | 国模精品在线 | 国产一区二区三区黄 | 国产精品观看在线亚洲人成网 | 免费观看福利视频 | 国产精品资源 | 久久婷婷亚洲 | 成人黄色在线观看视频 | 精品成人久久 | 亚洲三级精品 | 久久伊人免费视频 | 欧美极品一区二区三区 | 久久久国际精品 | 久久精品这里都是精品 | 午夜av免费观看 | 欧美视频xxx | 亚洲电影图片小说 | 国产精品久久久久久久久久尿 | av在线成人 | 在线观看久 | 久久99网站| 五月天婷婷综合 | 欧美日韩电影在线播放 | 麻豆免费在线视频 | 激情综合狠狠 | 亚洲黄色软件 | 99国产视频在线 | 成人a级网站 | 日韩成人黄色av | 曰韩精品| 激情网婷婷 | 好看av在线 | 最近中文字幕大全 | 久久精品视频在线看 | 五月婷婷综 | av电影免费观看 | 一二区av| 97超碰精品| 日韩欧美在线综合网 | 在线91播放 | 成人网在线免费视频 | 国产精品尤物 | 久久tv | 日韩精品视频在线观看免费 | 伊人色综合久久天天 | 成人影视免费看 | 久久99国产综合精品免费 | 国产精品一区二区你懂的 | 国产一级黄色电影 | 99精品国产成人一区二区 | 成年人在线免费看片 | 97超碰网| 久久 一区 | 制服丝袜欧美 | 亚洲国产欧洲综合997久久, | 国产婷婷久久 | 99久久9| 蜜桃传媒一区二区 | 少妇资源站 | 99精品电影 | 国产不卡在线 | 999超碰| 99久免费精品视频在线观看 | 五月天天色 | 亚洲精品美女免费 | 成人久久18免费网站 | 在线岛国av | 国产精品二区在线观看 | 香蕉视频18 | 国产日韩欧美在线观看 | 天天草天天干天天 | 成人精品影视 | 午夜在线免费观看视频 | 又黄又爽又无遮挡免费的网站 | 六月婷色 | 色婷婷免费| 91精品网站在线观看 | 亚洲国产高清在线观看视频 | 国产精品不卡在线播放 | 麻豆视频观看 | www.在线看片.com| 操操碰| www.av在线.com| 欧美一级日韩三级 | 日韩欧美xx| www国产亚洲精品久久麻豆 | 91在线免费播放 | 手机av在线不卡 | 在线观看视频国产一区 | 欧美色婷婷 | 国产精品日韩欧美 | 91免费视频网站在线观看 | 亚州免费视频 | 五月婷婷在线观看视频 | 超碰在线97国产 | 天天操狠狠操 | 色在线免费观看 | 九九久久国产 | 草久视频在线观看 | 日韩久久久久久久久久久久 | 亚洲精品视频国产 | 亚洲精品久久久久999中文字幕 | 97狠狠操 | 97精品超碰一区二区三区 | 天天在线操 | www九九热 | 亚洲乱码精品 | 亚洲国产成人精品电影在线观看 | 久久成年人网站 | 欧美一进一出抽搐大尺度视频 | 91精品国产福利在线观看 | 久久国产精品一区二区三区 | 国产成人精品国内自产拍免费看 | 激情五月婷婷 | 在线观看视频三级 | 97免费中文视频在线观看 | 成人在线播放网站 | av一级久久 | 九九九九九九精品任你躁 | 丁香五香天综合情 | 麻豆精品在线 | 69精品人人人人 | 嫩草av在线 | 精品一二三四视频 | 亚洲精品中文在线 | 综合久久久久久久 | 日韩av在线影视 | 亚洲视频专区在线 | 人人澡人人添人人爽一区二区 | 激情五月五月婷婷 | 中文字幕国产在线 | 天天干,夜夜爽 | 久久久久99精品国产片 | 久久在线免费观看 | www.在线观看av| 国产精品永久久久久久久www | 波多野结衣视频一区二区三区 | 国产成人精品午夜在线播放 | 色婷婷视频在线观看 | 欧美日韩免费在线视频 | 久久久久久国产精品久久 | 极品久久久久 | 久综合网| 久久久久国产精品厨房 | 黄在线 | 国产不卡在线视频 | 成人全视频免费观看在线看 | 亚洲精品456在线播放第一页 | av电影不卡在线 | 在线观看中文字幕一区二区 | 亚洲精品av中文字幕在线在线 | 黄色三级免费片 | 免费日韩电影 | 日本大片免费观看在线 | 天天干天天碰 | 99精品视频免费 | 人人超碰人人 | 国产色道| 日韩国产欧美在线播放 | 激情视频91| 久久视了| 久久视频精品在线观看 | 久久视频精品 | 久久免费观看少妇a级毛片 久久久久成人免费 | 深爱婷婷 | 亚洲激情精品 | 国产一级视屏 | 中文字幕91视频 | 中文字幕一区二区在线观看 | 天堂在线一区二区三区 | 中文字幕在线观看第一区 | 国产精品麻豆视频 | 香蕉视频亚洲 | 天天爱天天色 | 一区二区欧美日韩 | 国产一及片 | 国产91精品久久久久 | 日日干美女| 黄色天堂在线观看 | 天天爽网站 | 91尤物在线播放 | 亚洲理论电影 | 91福利视频在线 | 久久精品美女视频网站 | 一级黄色片网站 | 免费高清男女打扑克视频 | av国产网站| 国产专区视频在线 | 久久永久免费视频 | 天天干天天干天天操 | 精选久久 | 国产一区二区三区久久久 | 91精品在线免费观看 | 国产中文字幕免费 | 欧美小视频在线 | 亚洲精品久久久久www | 一级黄色免费网站 | www黄色大片 | 久在线观看视频 | 日韩免费 | 美女黄濒| 欧美一级视频在线观看 | 国产成人福利在线 | 99在线热播| 国产蜜臀av | 97在线视频免费播放 | 久久精品专区 | 毛片网站在线看 | 亚洲精品国产自产拍在线观看 | 在线播放视频一区 | 欧美成人理伦片 | 天天摸天天舔天天操 | 亚洲一二区视频 | 亚洲成人精品在线 | 在线天堂中文在线资源网 | 免费在线观看av的网站 | 亚洲国产黄色片 | 99久视频 | 亚洲国产免费 | 日韩欧三级 | 国产成人亚洲在线观看 | 国产日韩欧美综合在线 | 成人黄色免费观看 | 日韩午夜大片 | 日韩v在线 | 青春草视频 | 日韩69视频 | 超碰最新网址 | 成人免费观看完整版电影 | 中文字幕亚洲字幕 | 免费精品人在线二线三线 | 99久久99 | 天天草视频 | 丁香婷婷深情五月亚洲 | 黄色成人在线观看 | 人人精品 | 中文字幕亚洲欧美日韩2019 | 黄色福利视频网站 | 97在线看片| 天天天天天天操 | 91看片淫黄大片91 | 亚洲国产精品人久久电影 | 色婷婷综合视频在线观看 | 五月天国产 | 日韩欧美大片免费观看 | 在线视频欧美日韩 | 九九热有精品 | 日韩理论在线视频 | 亚洲涩涩涩涩涩涩 | 亚洲国产精品成人精品 | 一区二区三区久久精品 | 大胆欧美gogo免费视频一二区 | 色婷婷综合久久久久 | 男女视频国产 | 久草剧场| 国产精品99久久久久久久久 | 久久久久久久久久免费 | www.五月婷 | 精品欧美一区二区在线观看 | 亚洲热视频 | av在线免费观看网站 | 美女网站色 | 色综合五月天 | 国产一区二区在线免费播放 | 久久久久免费精品视频 | 人人澡澡人人 | 五月婷婷六月综合 | 天天操夜夜操 | 免费在线观看日韩视频 | 欧美日韩3p | 婷婷五月在线视频 | 欧美日韩精品在线免费观看 | 国产免费视频在线 | 亚洲国产中文字幕在线观看 | 久久av观看 | 青青色影院 | 免费高清在线观看成人 | 特级毛片在线观看 | 国模一区二区三区四区 | 8090yy亚洲精品久久 | av福利在线 | 亚洲影音先锋 | 91精品国产综合久久福利 | 激情电影影院 | 五月天婷婷免费视频 | 亚洲精品视频在线播放 | 色综合久久88色综合天天免费 | 婷婷综合伊人 | 欧美日本不卡 | 日韩中文字幕在线不卡 | 日韩在线观看影院 | 九九激情视频 | 日韩在线观看你懂的 | 人人澡人人澡人人 | 精品国产成人av在线免 | 天天操天天射天天爱 | 91麻豆精品国产91久久久使用方法 | 美女黄频视频大全 | 国产色综合 | 国产亚洲免费观看 | 国产123av | 99亚洲国产 | 一区二区 不卡 | 蜜桃视频在线观看一区 | 精品九九九九 | 色综合色综合久久综合频道88 | 国产福利一区二区三区在线观看 | 色视频在线免费 | 狠狠干在线播放 | 激情电影影院 | 欧洲亚洲国产视频 | 天天操天天爱天天爽 | 精品96久久久久久中文字幕无 | 久久精品免费 | 欧美午夜理伦三级在线观看 | 亚洲九九爱 | 日日麻批40分钟视频免费观看 | 超碰在97 | 久久久久国产一区二区 | 四虎www | 正在播放一区二区 | 天天看天天干 | 天天色 天天 | 国产精品99久久久久久人免费 | 伊人干综合 | 日韩狠狠操 | 国产精品欧美一区二区三区不卡 | 国产高清在线看 | 在线播放国产一区二区三区 | 色中文字幕在线观看 | 亚洲成人高清在线 | 久久99久久99精品免观看粉嫩 | 五月天视频网站 | 九九久久久久99精品 | 日韩精品一区二区三区在线视频 | 在线一区电影 | 香蕉视频啪啪 | 欧美 日韩 性 | 日韩欧美网址 | 久久黄色a级片 | 欧美午夜精品久久久久久浪潮 | 久久精品国产亚洲a | 中文字幕黄色网 | 亚洲精品美女久久久 | 日韩精品在线免费播放 | 97超碰中文字幕 | 99色资源 | 免费99精品国产自在在线 | 国产一级一片免费播放放 | 91av超碰 | 久久av高清 | 青春草免费在线视频 | 97人人精品| 视频高清 | 国产一区在线视频 | 狠狠狠操| 免费视频 你懂的 | 中文字幕在线观看第二页 | 婷婷九九| 国产久视频| 字幕网资源站中文字幕 | 在线免费性生活片 | 午夜91视频| 国语麻豆 | 国产视频 亚洲精品 | 成年人网站免费在线观看 | 日本久久久精品视频 | 日韩网站中文字幕 | 日韩r级电影在线观看 | av资源免费看 | 99色视频 | 国产视频在线一区二区 | 日韩a免费 | 久草免费资源 | 中文字幕精品三区 | 免费在线激情电影 | 欧美激情va永久在线播放 | 91高清完整版在线观看 | 久久影院精品 | 亚洲精品免费在线观看视频 | 久精品在线观看 | 免费69视频 | 美女视频黄免费网站 | 在线观看aa | 麻豆影视网站 | 麻花天美星空视频 | 亚洲1区 在线 | 日日草av | 婷婷丁香在线观看 | 欧美精品乱码久久久久久 | 国产69精品久久99的直播节目 | 在线观看视频亚洲 | 三级黄色a | 免费观看www小视频的软件 | 欧美成人h版电影 | 中文字幕免费中文 | 免费瑟瑟网站 |