最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vant 中van-list的用法說(shuō)明

 更新時(shí)間:2020年11月11日 15:45:51   作者:柚子Christy  
這篇文章主要介紹了vant 中van-list的用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

van-list里面的元素不能有float樣式,否則會(huì)連續(xù)觸發(fā) load 事件

原代碼

<template>
 <div class="about">
  <van-tabs v-model="active" sticky @change="getTypeDate">
   <van-tab v-for="(tab) in typeList" :title="tab.name" :key="tab.id">
    <div :style="{height: contentHeight}" class="pic-content">
     <van-list
      :finished="finished"
      :finished-text="finishedText"
      v-model="loading"
      :offset="10"
      :immediate-check="false"
      @load="getserviceList"
     >
     <!------------------------------------------------- 修改前代碼 --------------------------------------------->
       /*<div
        class="pic-box"
        v-for="(serve) in serviceList"
        :key="serve.id"
        @click="router(serve)"
       >
        <div class="pic-item">
         <img
          v-if="serve.picturePath"
          :src="$BASE_PICTUREPATH_URL + serve.picturePath.split(',')[0]"
         >
        </div>
        <p>{{serve.name}}</p>
        <p class="price-red">¥{{serve.price}}</p>
       </div>*/
       <!------------------------------------------------- 修改前代碼 --------------------------------------------->
     </van-list>
    </div>
   </van-tab>
  </van-tabs>
 </div>
</template>
<script>
import { Tab, Tabs, List, Cell, Row, Col } from "vant";
import { FetchServeType, FetchServeList } from "../apis/serve.js";

export default {
 data() {
  return {
   active: 0,
   typeList: [],
   serviceList: [],
   type: "",
   finishedText: "",
   finished: false,
   pageNum: 1,
   pageSize: 10,
   contentHeight: 0,
   loading: false
  };
 },
 mounted() {
  this.getOrderStyle();
  this.contentHeight = document.documentElement.clientHeight - 66 - 40 + "px";
 },
 methods: {
  async getOrderStyle() {
   let res = await FetchServeType();
   if (res.data && res.data.success) {
    this.typeList = res.data.data;
    this.type = res.data.data[0].name;
    this.getTypeDate();
   }
  },
  getTypeDate() {
   this.pageNum = 1;
   this.type = this.typeList[this.active].name;
   this.serviceList = [];
   this.finishedText = "";
   this.finished = false;
   this.getserviceList();
  },
  async getserviceList() {
   let toast = this.$toast.loading({
    mask: true,
    message: "加載中..."
   });
   const { type, pageNum, pageSize } = this;
   let params = {
    type,
    pageNum,
    pageSize
   };
   let res = await FetchServeList(params);
   this.loading = false;
   toast.close();
   if (res.data && res.data.success) {
    let list = (res.data.data && res.data.data.list) || [];
    if (pageNum > 1) {
     this.serviceList = [...this.serviceList, ...list];
    } else {
     this.serviceList = list;
    }
    // 如果當(dāng)前頁(yè)數(shù) = 總頁(yè)數(shù),則已經(jīng)沒(méi)有數(shù)據(jù)
    if (res.data.data.pageNum === res.data.data.pages) {
     this.finished = true;
     this.finishedText = "- 沒(méi)有更多了-";
    }
    // 如果總頁(yè)數(shù)大于當(dāng)前頁(yè)碼,頁(yè)碼+1
    if (res.data.data.pages > pageNum) {
     this.pageNum++;
    }
   }
   console.log("FetchServeList: ", this.serviceList);
  }
 }
};
</script>
<style lang="scss" scoped>
.pic-content {
 overflow-y: scroll;
 -webkit-overflow-scrolling: touch;
 .pic-box {
 /****************************修改前代碼***************************/
  background-color: #fff;
  overflow: hidden;
  break-inside: avoid;
  box-sizing: border-box;
  margin-bottom: 0.7rem;
  padding: 0.8rem;
  width: 48%;
  height: 16rem;
  ~~float: left;~~ /**************不能有float樣式*************/
  margin: 1%;
  border-radius: 4px;
   /****************************修改前代碼***************************/
  p:nth-of-type(1) {
   padding: 0.8rem 0;
  }
  p:nth-of-type(2) {
   color: red;
  }
  .pic-item {
   height: 11rem;

   flex-direction: column;
   justify-content: center;
   overflow: hidden;
   img {
    width: 100%;
    height: auto;
    border-radius: 4px;
   }
  }
 }
}
</style>

// 修改后代碼(注釋部分為修改后代碼)

<template>
 <div class="about">
  <van-tabs v-model="active" sticky @change="getTypeDate">
   <van-tab v-for="(tab) in typeList" :title="tab.name" :key="tab.id">
    <div :style="{height: contentHeight}" class="pic-content">
     <van-list
      :finished="finished"
      :finished-text="finishedText"
      v-model="loading"
      :offset="10"
      :immediate-check="false"
      @load="getserviceList"
     >
     <!------------------- 修改后代碼 -------------------->
      /*<van-row>
       <van-col
        span="12"
        class="pic-box"
        v-for="(serve) in serviceList"
        :key="serve.id"
        @click="router(serve)"
       >
        <div class="pic-item">
         <img
          v-if="serve.picturePath"
          :src="$BASE_PICTUREPATH_URL + serve.picturePath.split(',')[0]"
         >
        </div>
        <p>{{serve.name}}</p>
        <p class="price-red">¥{{serve.price}}</p>
       </van-col>
      </van-row>*/
      <!------------------- 修改后代碼 -------------------->
     </van-list>
    </div>
   </van-tab>
  </van-tabs>
 </div>
</template>
<script>
import { Tab, Tabs, List, Cell, Row, Col } from "vant";
import { FetchServeType, FetchServeList } from "../apis/serve.js";

export default {
 data() {
  return {
   active: 0,
   typeList: [],
   serviceList: [],
   type: "",
   finishedText: "",
   finished: false,
   pageNum: 1,
   pageSize: 10,
   contentHeight: 0,
   loading: false
  };
 },
 mounted() {
  this.getOrderStyle();
  this.contentHeight = document.documentElement.clientHeight - 66 - 40 + "px";
 },
 methods: {
  async getOrderStyle() {
   let res = await FetchServeType();
   if (res.data && res.data.success) {
    this.typeList = res.data.data;
    this.type = res.data.data[0].name;
    this.getTypeDate();
   }
  },
  getTypeDate() {
   this.pageNum = 1;
   this.type = this.typeList[this.active].name;
   this.serviceList = [];
   this.finishedText = "";
   this.finished = false;
   this.getserviceList();
  },
  async getserviceList() {
   let toast = this.$toast.loading({
    mask: true,
    message: "加載中..."
   });
   const { type, pageNum, pageSize } = this;
   let params = {
    type,
    pageNum,
    pageSize
   };
   let res = await FetchServeList(params);
   this.loading = false;
   toast.close();
   if (res.data && res.data.success) {
    let list = (res.data.data && res.data.data.list) || [];
    if (pageNum > 1) {
     this.serviceList = [...this.serviceList, ...list];
    } else {
     this.serviceList = list;
    }
    // 如果當(dāng)前頁(yè)數(shù) = 總頁(yè)數(shù),則已經(jīng)沒(méi)有數(shù)據(jù)
    if (res.data.data.pageNum === res.data.data.pages) {
     this.finished = true;
     this.finishedText = "- 沒(méi)有更多了-";
    }
    // 如果總頁(yè)數(shù)大于當(dāng)前頁(yè)碼,頁(yè)碼+1
    if (res.data.data.pages > pageNum) {
     this.pageNum++;
    }
   }
   console.log("FetchServeList: ", this.serviceList);
  }
 }
};
</script>
<style lang="scss" scoped>
.pic-content {
 overflow-y: scroll;
 -webkit-overflow-scrolling: touch;
 .pic-box {
 /************************ 修改后代碼**************************/
  background-color: #fff;
  overflow: hidden;
  box-sizing: border-box;
  margin-bottom: 0.7rem;
  padding: 0.8rem;
  height: 16rem;
  border-radius: 4px;
  /************************ 修改后代碼************************ **/
  p:nth-of-type(1) {
   padding: 0.8rem 0;
  }
  p:nth-of-type(2) {
   color: red;
  }
  .pic-item {
   height: 11rem;

   flex-direction: column;
   justify-content: center;
   overflow: hidden;
   img {
    width: 100%;
    height: auto;
    border-radius: 4px;
   }
  }
 }
}
</style>

補(bǔ)充知識(shí):vant里 List 組件可以與 PullRefresh 組件結(jié)合使用的一個(gè)小提示與小坑坑

小提示

List 組件可以與 PullRefresh 組件結(jié)合使用,可以實(shí)現(xiàn)列表下拉刷新的效果,但是當(dāng)下拉刷新后更新的數(shù)據(jù)展示在頁(yè)面上不能撐滿(mǎn) List 列表中的內(nèi)容的時(shí)候,他并不會(huì)主動(dòng)觸發(fā)列表刷新,以至于來(lái)填滿(mǎn)列表。

可以給list組件添加ref屬性,然后在下拉刷新后,在下拉刷新的事件里手動(dòng)調(diào)用this.$refs.listRef(你的list的ref名稱(chēng)).check()來(lái)觸發(fā)列表加載后續(xù)的數(shù)據(jù)

// list組件
<van-list
  v-model="loading"
  ref="listRef" // 1. 綁定ref
  :finished="finished"
  finished-text="沒(méi)有更多了"
  :error.sync="error"
  error-text="請(qǐng)求失敗,點(diǎn)擊重新加載"
  @load="onLoad"
>
// 下拉刷新的事件
onRefresh() {
 ...刷新成功后
 // 2.手動(dòng)去讓下拉刷新后,去執(zhí)行l(wèi)ist列表的load事件
 this.$refs.listRef.check()
}

小坑坑

如果你把List 組件可以與 PullRefresh 組件結(jié)合使用封裝成一個(gè)組件,然后在父組件中使用的時(shí)候,需要給封裝的這個(gè)組件傳list組件的v-model的值來(lái)控制list是否處于加載狀態(tài)。

然后在父組件傳 v-moel=“l(fā)oading” 或者 :is-loading.sync=“l(fā)oading” 傳給子組件讓他來(lái)控制子組件的list的v-model的控制load加載狀態(tài),按理說(shuō)v-model 默認(rèn)是 value 屬性和 input 事件的組合,但是list組件的文件默認(rèn)修改了,把傳過(guò)去的value用 model: { prop: ‘loading' }修改了,所以我們?cè)谧咏M件接收的時(shí)候不能用value 要用loading

此圖為vant的源碼

// 父組件 給子組件傳list的v-model的值
:is-loading.sync="loading"
// 或?qū)懗?
v-model="loading"

// 子組件 list組件
// 子組件不能用value接收 
// :value="isLoading"
// 應(yīng)該寫(xiě)成loading
:loading="isLoading"

以上這篇vant 中van-list的用法說(shuō)明就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue+thinkphp5.1+axios實(shí)現(xiàn)文件上傳

    Vue+thinkphp5.1+axios實(shí)現(xiàn)文件上傳

    這篇文章主要為大家詳細(xì)介紹了Vue+thinkphp5.1+axios實(shí)現(xiàn)文件上傳,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • vue里的axios如何獲取本地json數(shù)據(jù)

    vue里的axios如何獲取本地json數(shù)據(jù)

    這篇文章主要介紹了vue里的axios如何獲取本地json數(shù)據(jù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Vue3?響應(yīng)式系統(tǒng)實(shí)現(xiàn)?computed

    Vue3?響應(yīng)式系統(tǒng)實(shí)現(xiàn)?computed

    這篇文章主要介紹了?Vue3?響應(yīng)式系統(tǒng)實(shí)現(xiàn)?computed,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下
    2022-06-06
  • 深入理解vue輸入框字符限制的優(yōu)化設(shè)計(jì)方案

    深入理解vue輸入框字符限制的優(yōu)化設(shè)計(jì)方案

    限制輸入框字符是一項(xiàng)需要結(jié)合技術(shù)實(shí)現(xiàn)與用戶(hù)體驗(yàn)的綜合設(shè)計(jì),通過(guò)實(shí)時(shí)限制、提交校驗(yàn)與性能優(yōu)化,開(kāi)發(fā)者可以高效解決輸入限制問(wèn)題,同時(shí)提升用戶(hù)滿(mǎn)意度和數(shù)據(jù)安全性,本文給大家介紹vue輸入框字符限制的優(yōu)化設(shè)計(jì),感興趣的朋友跟隨小編一起看看吧
    2024-12-12
  • Avue實(shí)現(xiàn)動(dòng)態(tài)查詢(xún)與數(shù)據(jù)展示的示例代碼

    Avue實(shí)現(xiàn)動(dòng)態(tài)查詢(xún)與數(shù)據(jù)展示的示例代碼

    Avue是一個(gè)基于Vue.js的前端框架,它是由阿里云開(kāi)發(fā)的一款企業(yè)級(jí)UI組件庫(kù),旨在提供一套全面、易用且高性能的界面解決方案本文介紹了Avue實(shí)現(xiàn)動(dòng)態(tài)查詢(xún)與數(shù)據(jù)展示的示例,需要的朋友可以參考下
    2024-08-08
  • Vue實(shí)現(xiàn)可復(fù)用輪播組件的方法

    Vue實(shí)現(xiàn)可復(fù)用輪播組件的方法

    這篇文章主要為大家詳細(xì)介紹了Vue實(shí)現(xiàn)可復(fù)用輪播組件的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • vue使用localStorage保存登錄信息 適用于移動(dòng)端、PC端

    vue使用localStorage保存登錄信息 適用于移動(dòng)端、PC端

    這篇文章主要為大家詳細(xì)介紹了vue使用localStorage保存登錄信息 適用于移動(dòng)端、PC端,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • vue 使用自定義指令實(shí)現(xiàn)表單校驗(yàn)的方法

    vue 使用自定義指令實(shí)現(xiàn)表單校驗(yàn)的方法

    今天小編就為大家分享一篇vue 使用自定義指令實(shí)現(xiàn)表單校驗(yàn)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • 在 React、Vue項(xiàng)目中使用SVG的方法

    在 React、Vue項(xiàng)目中使用SVG的方法

    本篇文章主要介紹了在 React、Vue項(xiàng)目中使用SVG的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-02-02
  • Vue-cropper 圖片裁剪的基本原理及思路講解

    Vue-cropper 圖片裁剪的基本原理及思路講解

    這篇文章主要介紹了Vue-cropper 圖片裁剪的基本原理及思路講解,本文圖文并茂給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2018-04-04

最新評(píng)論

罗城| 旺苍县| 小金县| 泗洪县| 平江县| 渑池县| 孟津县| 衡阳县| 丹寨县| 温宿县| 丽水市| 亚东县| 邢台县| 论坛| 黎平县| 汉沽区| 乌鲁木齐县| 清水河县| 同仁县| 嵩明县| 四会市| 淮阳县| 余姚市| 洞口县| 镇安县| 南靖县| 平遥县| 梅河口市| 定西市| 龙里县| 樟树市| 巧家县| 六枝特区| 峨眉山市| 连平县| 治多县| 大兴区| 汶川县| 惠安县| 宁明县| 高邑县|