前端组件库——Vant 4知识点大全(二)

简介: 教程来源 http://yvyus.cn/category/shengxiaoxingge.html Vant是轻量可靠的移动端Vue组件库,提供Button、Cell、Form、List、Dialog等70+高质量组件,支持按需引入、主题定制与TypeScript,全面覆盖H5及小程序开发场景。

三、核心组件详解

3.1 按钮组件 Button
按钮是用户交互中最基础的组件,Vant提供了多种按钮样式。

<template>
  <!-- 按钮类型 -->
  <van-button type="primary">主要按钮</van-button>
  <van-button type="success">成功按钮</van-button>
  <van-button type="danger">危险按钮</van-button>
  <van-button type="warning">警告按钮</van-button>
  <van-button type="default">默认按钮</van-button>

  <!-- 按钮尺寸 -->
  <van-button type="primary" size="large">大号按钮</van-button>
  <van-button type="primary" size="normal">普通按钮</van-button>
  <van-button type="primary" size="small">小型按钮</van-button>
  <van-button type="primary" size="mini">迷你按钮</van-button>

  <!-- 块级按钮(占满父容器宽度) -->
  <van-button type="primary" block>块级按钮</van-button>

  <!-- 方形按钮 -->
  <van-button type="primary" square>方形按钮</van-button>

  <!-- 禁用状态 -->
  <van-button type="primary" disabled>禁用按钮</van-button>

  <!-- 加载状态 -->
  <van-button type="primary" loading>加载中</van-button>

  <!-- 图标按钮 -->
  <van-button type="primary" icon="star-o">收藏</van-button>
  <van-button type="primary" icon="https://example.com/icon.png">自定义图标</van-button>
</template>

3.2 单元格组件 Cell
单元格是移动端列表布局的核心组件,常用于信息展示和导航。

<template>
  <!-- 基础单元格 -->
  <van-cell title="单元格标题" value="内容" />
  <van-cell title="单元格标题" label="描述信息" value="内容" />

  <!-- 带图标的单元格 -->
  <van-cell title="单元格" icon="location-o" />

  <!-- 带右侧箭头的单元格(常用于导航) -->
  <van-cell title="单元格" is-link to="/page" />

  <!-- 自定义内容 -->
  <van-cell title="单元格">
    <template #value>
      <van-tag type="danger">标签</van-tag>
    </template>
  </van-cell>

  <!-- 单元格组 -->
  <van-cell-group title="分组标题">
    <van-cell title="单元格1" value="内容1" />
    <van-cell title="单元格2" value="内容2" />
    <van-cell title="单元格3" value="内容3" />
  </van-cell-group>
</template>

3.3 表单组件 Form
Vant提供了完整的表单组件体系,包括输入框、选择器、开关等。

<template>
  <van-form @submit="onSubmit">
    <van-cell-group inset>
      <!-- 输入框 -->
      <van-field
        v-model="formData.username"
        name="username"
        label="用户名"
        placeholder="请输入用户名"
        :rules="[{ required: true, message: '请填写用户名' }]"
      />

      <!-- 密码输入框 -->
      <van-field
        v-model="formData.password"
        type="password"
        name="password"
        label="密码"
        placeholder="请输入密码"
        :rules="[{ required: true, message: '请填写密码' }]"
      />

      <!-- 数字输入框 -->
      <van-field
        v-model="formData.age"
        type="digit"
        label="年龄"
        placeholder="请输入年龄"
      />

      <!-- 带右侧按钮的输入框 -->
      <van-field
        v-model="formData.code"
        label="验证码"
        placeholder="请输入验证码"
      >
        <template #button>
          <van-button size="small" type="primary" @click="sendCode">发送验证码</van-button>
        </template>
      </van-field>

      <!-- 开关 -->
      <van-field name="switch" label="开关">
        <template #input>
          <van-switch v-model="formData.switch" />
        </template>
      </van-field>
    </van-cell-group>

    <div style="margin: 16px;">
      <van-button round block type="primary" native-type="submit">提交</van-button>
    </div>
  </van-form>
</template>

<script setup>
import { reactive } from 'vue';
import { showToast } from 'vant';

const formData = reactive({
  username: '',
  password: '',
  age: '',
  switch: false,
});

const onSubmit = (values) => {
  showToast('提交成功');
  console.log(values);
};

const sendCode = () => {
  showToast('验证码已发送');
};
</script>

3.4 列表组件 List
List组件用于实现无限滚动加载,是移动端长列表场景的核心组件。

<template>
  <van-list
    v-model:loading="loading"
    :finished="finished"
    finished-text="没有更多了"
    @load="onLoad"
  >
    <van-cell v-for="item in list" :key="item.id" :title="item.title" />
  </van-list>
</template>

<script setup>
import { ref } from 'vue';
import { showToast } from 'vant';

const list = ref([]);
const loading = ref(false);
const finished = ref(false);
let page = 1;

const onLoad = async () => {
  // 模拟异步请求
  const newData = await fetchData(page);
  list.value.push(...newData);
  loading.value = false;

  if (newData.length === 0) {
    finished.value = true;
  }
  page++;
};
</script>

3.5 弹出层组件
Vant提供了多种弹出层组件,满足不同场景的需求。

3.5.1 动作面板 ActionSheet

<template>
  <van-action-sheet v-model:show="showActionSheet" :actions="actions" @select="onSelect" />
</template>

<script setup>
import { ref } from 'vue';
import { showToast } from 'vant';

const showActionSheet = ref(false);
const actions = [
  { name: '选项一', value: 1 },
  { name: '选项二', value: 2 },
  { name: '选项三', value: 3, subname: '描述信息' },
  { name: '选项四', value: 4, disabled: true },
];

const onSelect = (item) => {
  showToast(`选中了${item.name}`);
  showActionSheet.value = false;
};
</script>

3.5.2 对话框 Dialog

<script setup>
import { showDialog, showConfirmDialog } from 'vant';

// 提示对话框
const showAlert = () => {
  showDialog({
    title: '标题',
    message: '内容',
    confirmButtonText: '知道了',
  });
};

// 确认对话框
const showConfirm = async () => {
  try {
    await showConfirmDialog({
      title: '确认',
      message: '确定要删除吗?',
    });
    showToast('点击了确认');
  } catch {
    showToast('点击了取消');
  }
};
</script>

3.5.3 轻提示 Toast

<script setup>
import { showToast, showLoadingToast, showSuccessToast, showFailToast } from 'vant';

// 普通提示
showToast('提示内容');

// 成功提示
showSuccessToast('操作成功');

// 失败提示
showFailToast('操作失败');

// 加载提示
showLoadingToast({
  message: '加载中...',
  forbidClick: true,  // 禁止点击
});

// 自定义位置
showToast({
  message: '顶部提示',
  position: 'top',
});
</script>

3.6 图片上传组件 Uploader

<template>
  <van-uploader v-model="fileList" :max-count="5" :after-read="afterRead" />
</template>

<script setup>
import { ref } from 'vue';
import { showToast } from 'vant';

const fileList = ref([]);

const afterRead = (file) => {
  // 模拟上传请求
  const formData = new FormData();
  formData.append('file', file.file);

  // 上传逻辑...
  showToast('上传成功');
};
</script>

四、进阶用法

4.1 组件注册方式
Vant支持多种组件注册方式:

方式一:全局注册

import { Button } from 'vant';
import { createApp } from 'vue';

const app = createApp();
app.use(Button);

方式二:全量注册

import Vant from 'vant';

app.use(Vant);

方式三:局部注册

<script setup>
import { Button } from 'vant';
// 在<script setup>中可以直接使用,无需手动注册
</script>

<template>
  <van-button>按钮</van-button>
</template>

4.2 组件插槽
Vant提供了丰富的组件插槽,支持个性化定制。

<template>
  <!-- 自定义复选框图标 -->
  <van-checkbox v-model="checked">
    <template #icon="props">
      <img :src="props.checked ? activeIcon : inactiveIcon" />
    </template>
  </van-checkbox>

  <!-- 自定义导航栏内容 -->
  <van-nav-bar title="标题">
    <template #left>
      <van-icon name="arrow-left" @click="onClickLeft" />
    </template>
    <template #right>
      <van-icon name="ellipsis" />
    </template>
  </van-nav-bar>
</template>

4.3 组件实例方法
Vant中的许多组件提供了实例方法,需要通过ref调用。

<template>
  <van-checkbox v-model="checked" ref="checkboxRef">复选框</van-checkbox>
  <van-button @click="toggleCheckbox">切换</van-button>
</template>

<script setup>
import { ref } from 'vue';

const checked = ref(false);
const checkboxRef = ref(null);

const toggleCheckbox = () => {
  checkboxRef.value?.toggle();
};
</script>

4.4 组合式API
Vant底层依赖了@vant/use包,提供了一系列实用的组合式API。
image.png
useCountDown示例:

<script setup>
import { useCountDown } from '@vant/use';

const { current, isRunning, start, reset } = useCountDown({
  time: 60 * 1000,
  onFinish: () => {
    showToast('倒计时结束');
  },
});

// 开始倒计时
const startCountdown = () => {
  start();
};
</script>

<template>
  <div>{
  { current }}秒</div>
  <van-button @click="startCountdown">开始倒计时</van-button>
</template>

来源:
http://yvyus.cn/category/shengxiaopeidui.html

相关文章
|
1月前
|
人工智能 数据挖掘 Linux
小龙虾 AI 🦞OpenClaw+Skills重构科研工作流,阿里云/本地零基础部署、科研 Skill 开发应用指南
在科研工作的全流程中,文献检索、数据整理、论文撰写等重复性工作往往占据了研究者80%的时间,真正用于创新思考的精力被大幅压缩。传统聊天式AI难以解决科研场景中的实际执行问题,而OpenClaw作为一款面向执行的智能体框架,搭配可自定义的Skills技能模块,构建起了科研全流程自动化的完整体系,实现了从“自然语言指令”到“实际任务执行”的闭环。不同于传统工具的单一功能,OpenClaw能够自主规划任务步骤、调度各类Skills,将研究者从繁琐的机械劳动中解放出来,聚焦于科研核心的创新与思考环节。本文将从OpenClaw与Skills的核心价值出发,详解2026年新手零基础下阿里云及本地多系统的部
820 22
|
4天前
|
JavaScript 前端开发 搜索推荐
前端组件库Element UI知识点大全(一)
教程来源 https://tmywi.cn/category/shishang.html Element UI是饿了么团队于2016年推出的Vue 2桌面端UI组件库,提供丰富组件、统一设计规范与24列栅格系统,显著提升中后台开发效率。GitHub超4万Star,广泛应用于国内管理系统,虽Vue 3时代有Element Plus替代,但其设计理念仍深刻影响生态。
|
1天前
|
移动开发 JavaScript 小程序
前端组件库——uView UI知识点大全
教程来源 http://uklgy.cn/category/strength-training.html uView UI是uni-app生态中广受欢迎的跨平台UI组件库,支持Vue2/3,覆盖小程序、H5、App等多端。组件丰富(60+)、性能优异、文档完善,兼顾开发效率与包体积优化,累计获4.5k+ Star。
|
7天前
|
机器学习/深度学习 缓存 搜索推荐
Java+AI实战:从零构建智能推荐系统(一)
教程来源 https://tmywi.cn/category/jiankang.html 本文详解如何用Java从零构建生产级智能推荐系统SmartRec,覆盖数据采集、特征工程、多路召回、深度排序、重排及A/B测试全链路。聚焦高并发、实时性与可扩展性,助你掌握AI落地核心能力。
|
1天前
|
JavaScript 前端开发 UED
前端组件库——uView UI知识点大全(三)
教程来源 http://oplhc.cn/category/artificial-intelligence.html uView提供丰富工具函数(时间处理、数据验证、防抖节流、对象操作)、HTTP请求封装及全局配置;支持easycom按需加载与手动引入,优化性能;uView Pro全面升级Vue 3+TS,新增u-fab、u-text等高实用组件。
|
1天前
|
前端开发 JavaScript iOS开发
前端组件库——uView UI知识点大全(二)
教程来源 http://uklgy.cn/category/stretching.html uView UI提供60+高质量组件,涵盖按钮、栅格、表单、文本、反馈及布局辅助等核心模块,支持主题定制、CSS变量动态切换与样式覆盖,助力高效构建美观、响应式的中后台应用。
|
2天前
|
移动开发 JavaScript 前端开发
前端组件库——Vant 4知识点大全(一)
教程来源 http://yvyus.cn/ Vant 4 是面向 Vue 3 的轻量级移动端组件库,2022年12月发布,支持深色模式、5个新组件(如TimePicker、DatePicker)、体积更小(组件平均<1KB),零依赖、TypeScript 全面支持,GitHub 星标超2.2万,国内H5开发事实标准。
|
2天前
|
自然语言处理 前端开发 JavaScript
前端组件库——Element Plus知识点大全(三)
教程来源 https://yyvgt.cn/category/jiushige.html 本文详解Element Plus性能优化与国际化实践:通过按需引入(体积降60%+)、代码分割、骨架屏、组件懒加载四大策略显著提升首屏速度;并借助el-config-provider轻松实现中英文等多语言切换,助力构建高性能、国际化的企业级Vue 3应用。
|
24天前
|
JavaScript 前端开发 开发者
JavaScript学习知识点大全(四)
教程来源 https://app-aaqhxe29haf5.appmiaoda.com 讲解JavaScript模块化(ES6/ CommonJS)、ES6+核心特性(解构、展开符、模板字符串、可选链、BigInt等)及性能优化技巧(内存管理、代码与网络优化),涵盖最佳实践与实用示例,助力开发者构建高效、可维护的现代Web应用。
|
24天前
|
SQL 存储 JSON
MySQL学习知识点(一)
教程来源 https://app-ac8abncezqpt.appmiaoda.com MySQL核心知识,涵盖基础概念、安装配置、SQL命令、数据类型(数值/字符串/日期/JSON)、表操作(建删改查、索引、引擎)等,兼顾初学者入门与DBA进阶需求。
下一篇
开通oss服务