Vant2组件库的基础应用

目录

一、Picker 选择器

1.1、数组对象处理

1.2、每个选项颜色设置

二、滚动分页加载列表

三、Calendar 日历(可选范围限制)

四、input值过滤

官网:Vant 2 - Mobile UI Components built on Vue

一、Picker 选择器

官网示例数据:

columns: ['杭州', '宁波', '温州', '绍兴', '湖州', '嘉兴', '金华', '衢州'],

1.1、数组对象处理

  一般接口返回格式是数组对象,在项目中van-picker的数组如果含有对象,则需要包含 text 属性用于显示的文本、value 属性作为选择器的值,如果接口返回的结果中属性名和我们期望的不一样,就自己map设置一下。

<template>
      <van-field
        v-model="segmentSign.text"
        clearable
        label="所属列表"
        placeholder="点击选择所属列表"
      >
        <template #right-icon>
          <van-icon name="arrow" @click="showPicker = true" />
        </template>
      </van-field>
    <!-- 复杂数组的选择器 -->
    <van-popup v-model="showPicker" position="bottom" :lazy-render="false">
      <van-picker
        show-toolbar
        :columns="segmentList"
        @confirm="onConfirm"
        @cancel="showPicker = false"
      >
      </van-picker>
    </van-popup>
</template>
<script>
  data() {
      showPicker: false,
      segmentList: [],
      segmentSign: {},
    };
  },
  methods: {
    onConfirm(val) {
      this.segmentSign = val;
      this.showPicker = false;
    },
    async getDepartList() {
      let res = await findDepartList();
      if (res.data.code == 200) {
        let data = res.data.result || [];
        if (data.length > 0) {
          let result = data.map((item) => {
            let res = {};
            res.text = item.deptName;
            res.value = item.deptId;
            res.teacherId = item.teacherId;
            return res;
          });
          this.segmentList = result;
          if (this.segmentList && this.segmentList.length > 0) {
            this.segmentSign = this.segmentList[0];
          }
        }
      } else {
        Toast(res.data.message);
      }
    },
}
</script>

1.2、每个选项颜色设置

#option="option"里面放个div,是为了让每一行的样式可以自己设置,也可以加更多内容!

<template>
        <van-picker
          :columns="columns"
          ref="van_picker"
          :default-index="StatusVal.status"
          @change="PickerChange"
        >
          <template #option="option">
            <div
              style="display: flex; flex-direction: column; align-items: center"
            >
              <div :style="'color:' + colorType(option.id)">
                {{ option.value }}
              </div>
            </div>
          </template>
        </van-picker>
</template>
<script>
  data() {
      columns: [
        { id: 0, value: "出勤" },
        { id: 1, value: "迟到" },
        { id: 2, value: "旷课" },
        { id: 3, value: "早退" },
        { id: 4, value: "请假" },
      ],
      StatusVal: {},
      selectId: "",
    };
  },
  methods: {
    // picker选项改变
    PickerChange(val, index) {
      this.selectId = index.id;
    },
    colorType(index) {
      const colors = ["#6BC25E", "#F0A55C", "#E77575", "#F0A55C", "#6FBFF1"];
      return colors[index] || "";
    },
}
</script>

列表默认值属性 :default-index结合setIndexes才能将默认值修改自己想要的结果

      this.$nextTick(() => {
        this.$refs.van_picker.setIndexes([this.StatusVal.status]); // 注意这里是数组[索引值]
      });

二、滚动分页加载列表

  页面初始化时加载初始列表方法,随着页面向下滚动和刷新,页面递增,此时发送请求,获取下一页数据,这个适用于vue2,只需要换成自己的接口和循环组件即可!

<template>
          <!-- 下拉刷新 -->
          <van-pull-refresh v-model="isLoading" @refresh="onRefresh">
            <!-- 列表 -->
            <van-list
              v-if="valueLists.length > 0"
              v-model="loading"
              :finished="finished"
              finished-text="没有更多了"
              :immediate-check="false"
              offset="50"
              @load="onLoad"
            >
              <group-items
                v-for="(item, index) in valueLists"
                :key="index"
                :infoItems="item"
              ></group-items>
            </van-list>
            <van-empty
              image-size="150"
              v-else
              :image="
                require('../../../../static/images/courseSelection/wu.png')
              "
              description="暂无数据"
              class="empty"
            />
            <!-- end -->
          </van-pull-refresh>
</template>
<script>
  data() {
    return {
      finished: false,
      loading: false,
      isLoading: false,
      valueLists: [],
      pageNum: 1,
      pageSize: 10,
      pages: 0,
    };
  },
  created() {
    this.findRecordPageFun();
  },
  methods: {
    // 下拉刷新
    onRefresh() {
      // 重置页码
      this.pageNum = 1;
      // 重置刷新状态
      this.finished = false;
      this.loading = false;
      // 请求列表
      this.findRecordPageFun();
    },
    // 加载更多
    onLoad() {
      this.findRecordPageMore();
    },
    // 获取初始列表
    findRecordPageFun() {
      let params = {
        pageNo: this.pageNum,
        pageSize: this.pageSize,
      };
      this.invokeApi(findRecordPage, params).then((res) => {
        if (res.data.code == 200) {
          this.valueLists = res && res.data.result.records;
          this.pages = res && res.data.result.pages;
          if (this.isLoading) return (this.isLoading = false);
        } else {
          Toast(res.data.message);
          this.valueLists = [];
          this.pages = 0;
          this.pageNum = 1;
          this.finished = false;
          this.loading = false;
        }
      });
    },
    async findRecordPageMore() {
      // 请求页码+1
      let finePage = this.pageNum + 1;
      // 判断页码极限
      if (finePage > this.pages) return (this.finished = true);
      let params = {
        pageNo: this.pageNum,
        pageSize: this.pageSize,
      };
      this.invokeApi(findRecordPage, params).then((res) => {
        if (res.data.code == 200) {
          this.pages = res.data.result.pages;
          this.valueLists.push(...res.data.result.records);
          this.pageNum = finePage;
          this.loading = false;
        } else {
          Toast(res.data.message);
          this.valueLists = [];
          this.pages = 0;
          this.pageNum = 1;
          this.finished = false;
          this.loading = false;
        }
      });
    },
}
</script>

三、Calendar 日历(可选范围限制)

<template>
      <van-field
        v-model="times"
        readonly
        clearable
        placeholder="点击选择日期"
        class="custom-field"
      >
        <template #right-icon>
          <van-icon name="arrow" @click="showDate = true" />
        </template>
      </van-field>
      <!-- 日历 -->
      <van-calendar
        v-model="showDate"
        @confirm="dateConfirm"
        color="#1989fa"
        :min-date="minDate"
        :max-date="maxDate"
      />
</template>
<script>
  data() {
    return {
      times:'',
      showDate: false,
      minDate: this.getStartOfWeek(new Date()),
      maxDate: this.getEndOfWeek(new Date()),
    };
  },
  methods: {
    getStartOfWeek(date) {
      const day = date.getDay();
      const diff = date.getDate() - day + (day === 0 ? -6 : 1);
      return new Date(date.setDate(diff));
    },
    getEndOfWeek(date) {
      const startOfWeek = this.getStartOfWeek(date);
      const endOfWeek = new Date(startOfWeek);
      endOfWeek.setDate(endOfWeek.getDate() + 6);
      return endOfWeek;
    },
    dateConfirm(time) {
      const date = new Date(time);
      const year = date.getFullYear();
      const month = (date.getMonth() + 1).toString().padStart(2, "0");
      const day = date.getDate().toString().padStart(2, "0");
      this.times = `${year}-${month}-${day}`;
      this.showDate = false;
    },
}
</script>

场景介绍:

点击field栏,选择本周时间,选中后将值回显(minDate和maxDate在方法里限制了范围,在确定事件里整理格式,然后赋值给field栏绑定的值)

四、input值过滤

为啥不用  v-model.trim="xx",因为它只能过滤头部和尾部的空格,而不能过滤中间的,所以自己再写了个方法。

          <van-search
            v-model="searchValue"
            placeholder="请输入姓名"
            show-action
            @input="trimLR"
          >
            <template #action>
              <div @click="getCheckList">搜索</div>
            </template>
          </van-search>
    // 过滤空格
    trimLR() {
      this.searchValue = this.searchValue.replace(/\s+/g, "");
    },

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/726887.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Anti-human IL-12/-23 (p40) mAb (MT3279H), azide free

Anti-human IL-12/-23 (p40) mAb (MT3279H), azide free该单克隆抗体用于中和人IL-12/-23的生物活性。 产品详情&#xff1a; 免疫原&#xff1a;人重组IL-23蛋白 Isotype: mouse IgG2b Specificity: 天然和重组人IL-12和 IL-23蛋白的p40 subunit 浓度&#xff1a;1mg/ml …

查看nginx安装/配置路径,一个服务器启动两个nginx

查看nginx安装/配置路径 查看nginx的pid&#xff1a; ps -ef | grep nginx查看pid对应服务的启动路径 ll /proc/2320/exe使用检查配置文件命令&#xff0c;查看配置文件位置 /usr/local/nginx/sbin/nginx -t一个服务启动两个nginx 拷贝一份程序&#xff0c;cpbin是我自己创…

【HarmonyOS NEXT】har 包的构建生成过程

Har模块文件结构 构建HAR 打包规则 开源HAR除了默认不需要打包的文件&#xff08;build、node_modules、oh_modules、.cxx、.previewer、.hvigor、.gitignore、.ohpmignore&#xff09;和.gitignore/.ohpmignore中配置的文件&#xff0c;cpp工程的CMakeLists.txt&#xff0c;…

[CR]厚云填补_基于相似像素的渐进式缺口填补方法PGFCTS

Progressive gap-filling in optical remote sensing imagery through a cascade of temporal and spatial reconstruction models--Remote Sensing of Environment--2024.06.01 Abstract 在光学遥感图像的预处理中&#xff0c;由于云层较厚或传感器发生故障而产生的空白填充一…

群晖NAS本地部署并运行一个基于大语言模型Llama2的个人本地聊天机器人

前言 本文主要分享如何在群晖 NAS 本地部署并运行一个基于大语言模型 Llama 2 的个人本地聊天机器人并结合内网穿透工具发布到公网远程访问。本地部署对设备配置要求高一些,如果想要拥有比较好的体验,可以使用高配置的服务器设备. 目前大部分大语言模型的产品都是基于网络线上…

律所优选管理软件排名:Alpha法律智能操作系统领先行业

面对庞大复杂的管理体量&#xff0c;律所一体化建设面临的首要问题便是信息化系统的建设与应用&#xff0c;即统一管理平台的问题。Alpha法律智能操作系统集法律大数据、律所管理、人工智能于一体&#xff0c;从业务、人员、信息三个板块最大限度支持律所数字化建设&#xff0c…

电脑桌面文件夹删除不了怎么办?6种方法快速解决,建议收藏!

桌面文件夹删不掉怎么办&#xff1f;有时会遇到桌面上的文件夹无法删除的问题&#xff0c;这是由于文件夹被系统进程或某些应用占用&#xff0c;或者是由于权限设置等原因造成的。以下是解决桌面文件夹无法删除问题的方法&#xff0c;帮助你有效地清理桌面环境。 桌面文件夹删不…

南京邮电大学计算机网络实验二(网络路由器配置RIP协议)

文章目录 一、 实验目的和要求二、 实验环境(实验设备)三、 实验步骤四、实验小结&#xff08;包括问题和解决方法、心得体会、意见与建议等&#xff09;五、报告资源 一、 实验目的和要求 掌握思科路由器的运行过程&#xff0c;掌握思科路由器的硬件连线与接口&#xff0c;掌…

HNU-计算机系统(CSAPP)实验一 原型机vspm1.0

一、题目 【实验目的】 &#xff08;1&#xff09;了解冯诺伊曼体系结构&#xff1b; &#xff08;2&#xff09;理解指令集结构及其作用&#xff1b; &#xff08;3&#xff09;理解计算机的运行过程&#xff0c;就是指令的执行过程&#xff0c;并初步掌握调试方法。 【实…

黑马苍穹外卖4 店铺营业状态设置+Redis基础

店铺营业状态设置 Redis MySQL Java并发 JavaMVC 计算机网络 操作系统 算法&#xff0c;后端面试主要是这些&#xff0c;外加项目 Redis 数据库&#xff0c;基于内存存储的key-value结构。 mysql是磁盘存储&#xff0c;通过二维表存储。 在文件夹目录打开cmd 服务端&#xf…

HNU操作系统2023期中考试试卷及参考答案

本试题参考 甘晴void 的CSDN博客【2.2】操作系统OS_甘晴void的博客-CSDN博客&#xff0c;本意为期中复习自用&#xff0c;答案在其基础上进行进一步完善&#xff0c;若有错误还请指正&#xff01; 第一题&#xff1a;基础题&#xff08;20分&#xff09; 1.1&#xff08;4分&a…

Windows反截屏开发实现

文章目录 Windows反截屏开发实现1. SetWindowDisplayAffinity2. 反截屏系统3. 总结 Windows反截屏开发实现 最近在我们云桌面中需要做到反截屏能力&#xff0c;所谓反截屏就是我们无法通过截图软件&#xff08;微信&#xff0c;QQ&#xff0c;截图等程序&#xff09;截取桌面的…

lock-锁的概念

锁的简介 锁是计算机协调多个进程或线程并发访问某一资源的机制&#xff08;避免发生资源争抢&#xff09; 在并发环境下&#xff0c;多个线程会对同一个资源进行争抢&#xff0c;可能会导致数据不一致的问题。为了解决这一问题&#xff0c;需要通过一种抽象的锁来对资源进行…

springboot + Vue前后端项目(第十八记)

项目实战第十八记 写在前面1. 前台页面搭建&#xff08;Front.vue&#xff09;2. 路由3.改动登录页面Login.vue4. 前台主页面搭建Home.vue总结写在最后 写在前面 本篇主要讲解系统前台搭建&#xff0c;通常较大的项目都会搭建前台 1. 普通用户登录成功后前台页面效果&#xf…

RestTemple请求GET接口403

问题描述 使用oss接口获取资源的时候&#xff0c;通过浏览器可以直接下载&#xff0c;在代码中使用RestTemplate的get方式访问的时候&#xff0c;出现403错误 问题排查 因为返回状态码是403&#xff0c;就想着是不是授权问题&#xff0c;因为有的接口是有防抓取规则的&…

Java实现自动定时任务配置并判断当天是否需要执行示例

最近接到一个需求&#xff0c;用户要能配置一个定时循环的任务&#xff0c;就是和手机闹钟循环差不多&#xff0c;设置好比如周一、周二、周三&#xff0c;那么在这几天内这个任务就需要自动执行 需求不复杂&#xff0c;首先我需要判断当前是周几&#xff0c;当然用户说了让我…

【廉颇老矣,尚能饭否】传统的数据仓库是否还能发挥作用?

引言&#xff1a;随着数字化转型的深入和大数据技术的发展&#xff0c;大数据平台、数据中台和和数据湖技术不断涌现&#xff0c;给人感觉传统的数据仓库技术已经过时&#xff0c;廉颇老矣&#xff0c;不能应对新的挑战&#xff0c;在数字化转型中&#xff0c;不能发挥重要作用…

第4章 工程经济评价指标 作业

第4章 工程经济评价指标 作业 一单选题&#xff08;共27题&#xff0c;100分&#xff09; (单选题)利息备付率是指( )与应付利息费用的比值。 A. 息税前利润 B. 利润总额 C. 净利润 D. 营业收入 正确答案: A:息税前利润; (单选题)当净现值( )0时,该项目不可行。 A. < B. …

界面构件开发之RC文件

代码; #include <gtk-2.0/gtk/gtk.h> #include <gtk-2.0/gdk/gdkkeysyms.h> #include <glib-2.0/glib.h> #include <stdio.h>int main(int argc, char *argv[]) {gtk_init(&argc, &argv);gtk_rc_parse("./mainrc");GtkWidget *winN…

珈和科技和比昂科技达成战略合作,共创智慧农业领域新篇章

6月14日&#xff0c;四川省水稻、茶叶病虫害监测预警与绿色防控培训班在成都蒲江举办。本次培训班由四川省农业农村厅植物保护站主办&#xff0c;蒲江县农业农村局、成都比昂科技筹办。四川省农业农村厅植物保护站及四川省14个市州36个县植保站负责人进行了观摩学习。 武汉珈…