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

歡迎訪問 生活随笔!

生活随笔

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

vue

vue展示日历 考勤展示_VUE实战—菜单栏商品展示数据交互(8)

發布時間:2025/3/20 vue 60 豆豆
生活随笔 收集整理的這篇文章主要介紹了 vue展示日历 考勤展示_VUE实战—菜单栏商品展示数据交互(8) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上篇我們將菜單欄,商品展示結構完成,本次我們為這兩個部分接入數據。

菜單欄接入數據

導入組件,定義需要的數據格式

<script> // 導入BScroll 滾動組件 import BScroll from "better-scroll"; // 導入Food 商品頁面 import Food from "components/Food/Food"; ? export default {data() { //準備需要的數據,初始化組件。return {container: {},goods: [],poiInfo: {},listHeight: [],scrollY: 0,menuScroll: {},foodScroll: {},selectedFood: {}};},//引用組件components: {BScroll,Food} }; </script>

通過created鉤子發起請求獲取數據

之前我們說過在created鉤子,mounted鉤子內可以發起請求,請求需要的數據。本次我們在created鉤子內發起get請求,獲取數據

created() {//通過that改變.then中的this指向var that = this; ?// 通過axios發起get請求this.$axios.get("/api/goods").then(function(response) {// 獲取到數據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; ?// 調用滾動的初始化方法// that.initScroll();// 開始時,DOM元素沒有渲染,即高度是問題// 在獲取到數據后,并DOM已經被渲染,表示列表高度是沒問題的// nextTickthat.$nextTick(() => {// DOM已經更新that.initScroll(); ?// 計算分類區間高度that.calculateHeight();});}}).catch(function(error) {// 出錯處理console.log(error);});},

注意$nextTick()用法,在dom更新后。我們執行初始化滾動函數。

https://cn.vuejs.org/v2/api/#vm-nextTick

通過methods定義我們需要的方法

  • 通過head_bg(imgName)方法獲取到商品的背景圖片;
  • 方法initScroll()用來初始化滾動,https://cn.vuejs.org/v2/api/#ref;
  • calculateHeight()方法獲取左側每一個菜單欄目的元素;
  • 使用selectMenu()方法,在我們點擊菜單后,右側顯示對應的商品信息;
?methods: {head_bg(imgName) {return "background-image: url(" + imgName + ");";},// 滾動的初始化initScroll() {// ref屬性就是用來綁定某個dom元素或某個組件,然后在this.$refs里面this.menuScroll = new BScroll(this.$refs.menuScroll, {click: true});this.foodScroll = new BScroll(this.$refs.foodScroll, {probeType: 3,click: true}); ?// 添加滾動監聽事件this.foodScroll.on("scroll", pos => {this.scrollY = Math.abs(Math.round(pos.y));});},calculateHeight() {// 通過$refs獲取到對應的元素let foodlist = this.$refs.foodScroll.getElementsByClassName("food-list-hook"); ?// 添加到數組區間// 0~216 第一個區間(專場)// 217~1342 第二個區間(熱銷)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"); ?// 根據下標,滾動到相對應的元素let el = foodlist[index];// 滾動到對應元素的位置this.foodScroll.scrollToElement(el, 250);}},

computed定義屬性

  • currentIndex屬性綁定在左側菜單欄,使菜單元素與右側內容作為對應,展示給用戶。
?computed: {currentIndex() {// 根據右側滾動位置,確定對應的索引下標for (let i = 0; i < this.listHeight.length; i++) {// 獲取商品區間的范圍let height1 = this.listHeight[i];let height2 = this.listHeight[i + 1]; ?// 是否在上述區間中if (!height2 || (this.scrollY >= height1 && this.scrollY < height2)) {return i;}} ?return 0;}},

以上我們完成了商品頁面數據的交互,下一章節我們將加入商品控件,與購物車。

總結

以上是生活随笔為你收集整理的vue展示日历 考勤展示_VUE实战—菜单栏商品展示数据交互(8)的全部內容,希望文章能夠幫你解決所遇到的問題。

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