使用vant实现简单list

2025-12-13 0 702

1)注册list组件

import Vue from \’vue\’;
import {List} from \’vant\’;
Vue.use(List);

2)使用list结构

//主要分为两块,一是外壳的代码块,可固定以及里面的内容区。二是赋初始值属性值。
<van-list
v-model=\”loading\” //是否显示正在加载中
:finished=\”finished\” //是否显示加载完成
finished-text=\”没有更多了\” //加载完成后显示的文本内容
@load=\”onLoad\” //滚动条与底部一致触发该事件
>
中间内容区的数据
</van-list>
<script>
export default(){
data(){
return {
loading:false, //false:加载好了 true:加载中
finished:false // false:没有加载完成 true:加载完成同时显示finished-text属性值 默认是false表示加载更多数据
}
}
},
methods(){
onLoad(){ //触底执行该事件
//中间内容区的数据
}
}
</script>

3)模拟业务逻辑,编写代码

1>以一个接口为准,获取所有得工单任务信息。编写中间内容区的数据,vant list编写内容

2>添加获取得数据集 list

data(){
      return{
        list:[]   //当前所有工单任务信息
}} 

3>遍历该list

<div class=\”totalItem\” v-for=\”item in list\” :key=\”item.woRd\” >
<div class=\”link\”>
<div class=\”left\”>
<div class=\”fonts\”> {{item.materialCode}} </div>
<div>工单单号:{{item.woCode}}</div>
<div>计划开始时间:{{item.jstartDate}}</div>
</div>
<div class=\”right\”>
<div class=\”jindu\”>进度: {{item.finishNum}}/{{item.num}}</div>
<span><van-icon name=\”arrow\” color=\”#ccc\” size=\”35\”/></span>
</div>
</div>
</div>

4>添加样式(不是专业前端,随便写得望谅解,有更好得排版可提供也学习下)

.totalItem{
height: 65px;
line-height: 65px;
border-bottom: 1px solid #999;
margin-top: 10px;
padding: 10px;
.link{
height: 25px;
line-height: 25px;
color: #999;
position: absolute;
.left{
float: left;
.fonts{
font-size: 20px;
font-weight:bold;
}
}
.right{
float: right;
margin-left: 90px;
}
}
}

5>效果图如下:

使用vant实现简单list

image.png

4)继续实现加载更多数据

1>在onLoad() 事件中编写业务代码,这一步是实现了所有功能,包含下拉刷新以及搜索框信息,有不同的小伙伴们,可以指出,后续加上更新讲解

 <template>
  <div class=\"mes_woTask\">
    <div class=\"serach\">
       <van-search
        v-model=\"serachValue\"
        show-action
        placeholder=\"请输入\"
        @refresh=\"onRefresh\"
       @search=\"onSearch\"
        @clear=\"clear\"
       >
       <template #action>
         <div @click=\"onSearch\">搜索</div>
       </template>
      </van-search>
    </div>
   
    <van-pull-refresh v-model=\"refreshing\" @refresh=\"onRefresh\">
   
      <div class=\"list\">
        <div class=\"total\">共{{totalNum}}个任务:</div>
       
        <van-list
         v-model=\"loading\"
         :finished=\"finished\"
         finished-text=\"没有更多了\"
         @load=\"onLoad\"
         :immediate-check=\"false\"
         :offset=\"50\"
        >
        <div class=\"totalItem\" v-for=\"item in list\" :key=\"item.woRd\" >
         
          <div class=\"link\">
            <div class=\"left\">
             <div class=\"fonts\"> {{item.materialCode}} </div>
             <div>工单单号:{{item.woCode}}</div>
             <div>计划开始时间:{{item.jstartDate}}</div>
            </div>
           
            <div class=\"right\">
              <div class=\"jindu\">进度: {{item.finishNum}}/{{item.num}}</div>
              <span><van-icon name=\"arrow\" color=\"#ccc\" size=\"35\"/></span>
            </div>
          </div>
        </div>
        </van-list>
      </div>
   
    </van-pull-refresh>
  </div>
</template>

<script>
  export default {
    data(){
      return{
        list:[],     //当前所有工单任务信息
        serachValue: \'\', //当前搜索框值
        loading:false,
        finished:false,
        totalNum:0,   //加载出当前所有条数
        isSearch:false,
        refreshing:false, //下拉刷新
        prams:{     //搜索事件和加载后台数据,参数都是由后端代码定义的
          current:1, //当前页
          size:10,  //每页显示总数
          fields:[{
            fieldName:\"woCode\",
            fieldOpt:\"like\",
            fieldVal:\'\'
          },{
            fieldName:\"createTime\",
            fieldOpt:\"order by\",
            fieldVal:\"desc\"
          }]
        }
      }
    },
    created(){
      this.getAllWoTask();
    },
    methods:{
      getAllWoTask(){
       
        this.$axios({
         method:\'post\',
         url:\'/mes/WO/GetAllNewWOInfo\',
         header:{
             \'Content-Type\':\'application/json\' //如果写成contentType会报错
           },
         data: this.prams
        }).then(res=>{
        const {status,body} = res.data;
        if(status===\'00\'){
          
          this.list=[...this.list,...body.data.list];
          this.totalNum=this.totalNum+body.data.list.length;
         
          //每一次加载完设置false,便于下次继续加载
          this.loading=false;
          this.refreshing = false;
          this.isSearch=false;
          //判断是否还有数据加载
          if(this.prams.size>body.data.list.length){
            this.finished=true;
          }
         
         
        }else{
          this.$toast.fail(body.msgDes)
        }
        });
      },
      onLoad(){
        if (this.refreshing) {
         this.list = [];
         this.refreshing = false;
        this.prams.fields[0].fieldVal=this.serachValue;
        }else if(this.isSearch){
          this.list = [];
          this.totalNum=0;
          this.prams.current=1;
          this.prams.fields[0].fieldVal=this.serachValue;
        }
        else{
          this.prams.current++;
        }
        this.getAllWoTask();
      },
      onSearch(val) {
        this.totalNum=0;
        this.prams.current=1;
       if(val===\'\'){
         this.isSearch=false;
       }else{
        this.isSearch=true;
       }
       this.onLoad();
      // this.getAllWoTask();
      },
      onRefresh() {
       // 清空列表数据
       this.finished = false;
       this.refreshing=true;
       // 重新加载数据
       // 将 loading 设置为 true,表示处于加载状态
       this.loading = true;
       this.totalNum=0;
       this.prams.current=1;
       this.onLoad();
      },
      clear(){
        this.serachValue=\'\';
      }
     
    }
  }

 
</script>

<style lang=\"less\" scoped>
  .mes_woTask{
    .serach{
    }
    .list{
      .total{
        height: 30px;
        line-height: 30px;
        margin-left: 12px;
      }
      .totalItem{
        height: 65px;
        line-height: 65px;
        border-bottom: 1px solid #999;
        margin-top: 10px;
        padding: 10px;
        .link{
          height: 25px;
          line-height: 25px;
          color: #999;
          position: absolute;
          .left{
            float: left;
            .fonts{
              font-size: 20px;
              font-weight:bold;
            }
          }
          .right{
            float: right;
            margin-left: 90px;
          }
         
        }
      }
    }
   
  }
</style> 
2>最终效果图:

使用vant实现简单list

image.png

总结

1.如果loading为true,onLoad()方法不会执行。反之onLoad()方法会执行。
2.onLoad()方法加载数据时,第一次加载完后(有分页),设置loading改false才会出发下一次的事件执行
3.初始化数据list时,会默认执行onLoad方法。解决此问题,通过immediate-check属性解决。

<van-list
  v-model=\"loading\" :finished=\"finished\" finished-text=\"没有更多了\" @load=\"onLoad\" :immediate-check=\"false\" //默认第一次加载数据时不执行 onLoad()方法  > </van-list> 
  1. offset 属性值,

<van-list
              v-model=\"loading\" :finished=\"finished\" finished-text=\"没有更多了\" @load=\"onLoad\" :immediate-check=\"false\" :offset=\"70\" // 滚动条距离底部70得时候才会执行onLoad() 事件 > </van-list> 

5.注意下拉刷新数据的处理,以及搜索框输入值再下拉数据的处理。希望此教程可以帮助到你们。???

作者:xiaoqingnian_
链接:https://www.jianshu.com/p/67a919b15f43
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 编程相关 使用vant实现简单list https://www.zuozi.net/36513.html

常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务