摘要:上篇我們將菜單欄,商品展示結(jié)構(gòu)完成,本次我們?yōu)檫@兩個(gè)部分接入數(shù)據(jù)。菜單欄接入數(shù)據(jù)導(dǎo)入組件,定義需要的數(shù)據(jù)格式導(dǎo)入滾動(dòng)組件導(dǎo)入商品頁(yè)面準(zhǔn)備需要的數(shù)據(jù)初始化組件。
上篇我們將菜單欄,商品展示結(jié)構(gòu)完成,本次我們?yōu)檫@兩個(gè)部分接入數(shù)據(jù)。
菜單欄接入數(shù)據(jù)
導(dǎo)入組件,定義需要的數(shù)據(jù)格式
通過(guò)created鉤子發(fā)起請(qǐng)求獲取數(shù)據(jù)
之前我們說(shuō)過(guò)在created鉤子,mounted鉤子內(nèi)可以發(fā)起請(qǐng)求,請(qǐng)求需要的數(shù)據(jù)。本次我們?cè)赾reated鉤子內(nèi)發(fā)起get請(qǐng)求,獲取數(shù)據(jù)
created() { //通過(guò)that改變.then中的this指向 var that = this; // 通過(guò)axios發(fā)起get請(qǐng)求 this.$axios .get("/api/goods") .then(function(response) { // 獲取到數(shù)據(jù) var dataSource = response.data; if (dataSource.code == 0) { that.container = dataSource.data.container_operation_source; that.goods = dataSource.data.food_spu_tags; that.poiInfo = dataSource.data.poi_info; // 調(diào)用滾動(dòng)的初始化方法 // that.initScroll(); // 開始時(shí),DOM元素沒(méi)有渲染,即高度是問(wèn)題 // 在獲取到數(shù)據(jù)后,并DOM已經(jīng)被渲染,表示列表高度是沒(méi)問(wèn)題的 // nextTick that.$nextTick(() => { // DOM已經(jīng)更新 that.initScroll(); // 計(jì)算分類區(qū)間高度 that.calculateHeight(); }); } }) .catch(function(error) { // 出錯(cuò)處理 console.log(error); }); },
注意$nextTick()用法,在dom更新后。我們執(zhí)行初始化滾動(dòng)函數(shù)。
https://cn.vuejs.org/v2/api/#...
通過(guò)methods定義我們需要的方法
通過(guò)head_bg(imgName)方法獲取到商品的背景圖片;
方法initScroll()用來(lái)初始化滾動(dòng),https://cn.vuejs.org/v2/api/#ref;
calculateHeight()方法獲取左側(cè)每一個(gè)菜單欄目的元素;
使用selectMenu()方法,在我們點(diǎn)擊菜單后,右側(cè)顯示對(duì)應(yīng)的商品信息;
methods: {
head_bg(imgName) { return "background-image: url(" + imgName + ");"; }, // 滾動(dòng)的初始化 initScroll() { // ref屬性就是用來(lái)綁定某個(gè)dom元素或某個(gè)組件,然后在this.$refs里面 this.menuScroll = new BScroll(this.$refs.menuScroll, { click: true }); this.foodScroll = new BScroll(this.$refs.foodScroll, { probeType: 3, click: true }); // 添加滾動(dòng)監(jiān)聽(tīng)事件 this.foodScroll.on("scroll", pos => { this.scrollY = Math.abs(Math.round(pos.y)); }); }, calculateHeight() { // 通過(guò)$refs獲取到對(duì)應(yīng)的元素 let foodlist = this.$refs.foodScroll.getElementsByClassName( "food-list-hook" ); // 添加到數(shù)組區(qū)間 // 0~216 第一個(gè)區(qū)間(專場(chǎng)) // 217~1342 第二個(gè)區(qū)間(熱銷) let height = 0; this.listHeight.push(height); for (let i = 0; i < foodlist.length; i++) { let item = foodlist[i]; // 累加 height += item.clientHeight; this.listHeight.push(height); } }, selectMenu(index) { let foodlist = this.$refs.foodScroll.getElementsByClassName( "food-list-hook" ); // 根據(jù)下標(biāo),滾動(dòng)到相對(duì)應(yīng)的元素 let el = foodlist[index]; // 滾動(dòng)到對(duì)應(yīng)元素的位置 this.foodScroll.scrollToElement(el, 250); }
},
computed定義屬性
currentIndex屬性綁定在左側(cè)菜單欄,使菜單元素與右側(cè)內(nèi)容作為對(duì)應(yīng),展示給用戶。
computed: {
currentIndex() { // 根據(jù)右側(cè)滾動(dòng)位置,確定對(duì)應(yīng)的索引下標(biāo) for (let i = 0; i < this.listHeight.length; i++) { // 獲取商品區(qū)間的范圍 let height1 = this.listHeight[i]; let height2 = this.listHeight[i + 1]; // 是否在上述區(qū)間中 if (!height2 || (this.scrollY >= height1 && this.scrollY < height2)) { return i; } } return 0; } },
以上我們完成了商品頁(yè)面數(shù)據(jù)的交互,下一篇我們將加入商品控件,與購(gòu)物車。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/105622.html
摘要:運(yùn)行一下,發(fā)現(xiàn)路由變了,當(dāng)前項(xiàng)有標(biāo)識(shí)了,子菜單的顯示與隱藏也有了原理也很簡(jiǎn)單。 1.前言 上篇文章(webpack+vue項(xiàng)目實(shí)戰(zhàn)(一,搭建運(yùn)行環(huán)境和相關(guān)配置))搭建了好了基本的一個(gè)項(xiàng)目目錄,安好好了一些要用到的依賴,以及把項(xiàng)目跑了起來(lái)。接下來(lái),我們就進(jìn)行第二步的操作,第二步就是做好一個(gè)開發(fā)系統(tǒng)的主頁(yè)面,這個(gè)頁(yè)面主要也就是一個(gè)側(cè)邊欄,通過(guò)側(cè)邊欄的各個(gè)選項(xiàng)來(lái)進(jìn)行操作(切換各個(gè)組件)。比如...
摘要:本篇我們將繼續(xù)推進(jìn)外賣項(xiàng)目商品頁(yè)的展示。如圖所示,我們可以把商品也面分為兩大部分左側(cè)菜單欄右側(cè)商品展示為當(dāng)前商品頁(yè)面的根元素。下一篇文章我們開始為左側(cè)菜單欄,右側(cè)商品展示加入數(shù)據(jù)。 上次我們通過(guò)設(shè)計(jì)評(píng)價(jià)組件這個(gè)過(guò)程,了解到了組件設(shè)計(jì)中的良好的習(xí)慣,比如,文件夾如何支撐組件,圖片,組件路徑的存放于設(shè)置。 本篇我們將繼續(xù)推進(jìn)外賣項(xiàng)目—商品頁(yè)的展示。 showImg(https://segm...
摘要:哪吒別人的看法都是狗屁,你是誰(shuí)只有你自己說(shuō)了才算,這是爹教我的道理。哪吒去他個(gè)鳥命我命由我,不由天是魔是仙,我自己決定哪吒白白搭上一條人命,你傻不傻敖丙不傻誰(shuí)和你做朋友太乙真人人是否能夠改變命運(yùn),我不曉得。我只曉得,不認(rèn)命是哪吒的命。 showImg(https://segmentfault.com/img/bVbwiGL?w=900&h=378); 出處 查看github最新的Vue...
摘要:具體實(shí)現(xiàn)請(qǐng)查看和的退出登陸回調(diào)方法。現(xiàn)在除了必要的頁(yè)面需要在一開始添加到路由表里,其他的頁(yè)面都可以根據(jù)后臺(tái)數(shù)據(jù)來(lái)自動(dòng)生成。另外,如果在未登陸時(shí)要訪問(wèn)某一指定頁(yè)面,會(huì)重定向到登陸頁(yè),登陸成功后會(huì)自動(dòng)跳到這個(gè)指定頁(yè)面。 項(xiàng)目地址 vue-admin-template 在線預(yù)覽 更新 2019.6.25 更新 修復(fù)路由表沖突問(wèn)題 退出當(dāng)前用戶,換賬號(hào)重新登陸時(shí),上個(gè)賬號(hào)和現(xiàn)在的賬號(hào)路由表會(huì)有...
摘要:但是實(shí)際上,回款管理和開票管理的組件文件也是加載了。所以下面引用按需加載來(lái)處理。是不是小很多了,然后和是按需加載的,就是需要的時(shí)候才加載。 1.前言 上篇文章(webpack+vue項(xiàng)目實(shí)戰(zhàn)(二,開發(fā)管理系統(tǒng)主頁(yè)面)),實(shí)現(xiàn)了,側(cè)邊欄的一個(gè)操作,點(diǎn)擊側(cè)邊欄的一些操作,最重要的就是路由的切換。看了上一篇的伙伴也不難發(fā)現(xiàn),除了點(diǎn)擊側(cè)邊欄‘首頁(yè)’之外,點(diǎn)擊其它的都是白色的一片。原因我想大家都...
閱讀 3596·2021-09-13 10:28
閱讀 1947·2021-08-10 09:43
閱讀 1020·2019-08-30 15:44
閱讀 3190·2019-08-30 13:14
閱讀 1846·2019-08-29 16:56
閱讀 2947·2019-08-29 16:35
閱讀 2853·2019-08-29 12:58
閱讀 872·2019-08-26 13:46