前端组件库——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

相关文章
|
4月前
|
移动开发 JavaScript 前端开发
前端组件库——Vant 4知识点大全(一)
教程来源 http://yvyus.cn/ Vant 4 是面向 Vue 3 的轻量级移动端组件库,2022年12月发布,支持深色模式、5个新组件(如TimePicker、DatePicker)、体积更小(组件平均<1KB),零依赖、TypeScript 全面支持,GitHub 星标超2.2万,国内H5开发事实标准。
|
4月前
|
移动开发 前端开发 JavaScript
前端组件库——Vant 4知识点大全(三)
教程来源 http://uklgy.cn/category/running.html Vant 4是Vue 3主流移动端组件库,支持深色模式、CSS变量主题定制(700+变量)、动态换肤;提供vw/rem/桌面端/安全区等多维浏览器适配方案;并具备按需加载、图标优化、图片懒加载等高性能特性,轻量且TypeScript友好。
|
JavaScript 前端开发
vue 实现word文档预览和下载
vue 实现word文档预览和下载
2019 0
|
2月前
|
Windows
TortoiseSVN 下载与安装、汉化
TortoiseSVN是Windows平台免费开源的图形化SVN客户端,深度集成资源管理器,右键即可完成版本控制操作。支持多人协作、历史追溯、回滚与冲突管理,安装后可一键汉化。
590 1
|
资源调度
pnpm : 无法加载文件 C:\Users\86183\AppData\Roaming\npm\pnpm.ps1,因为在此系统上禁止运行脚本。
发现了问题,在上一个项目中我是使用的npm来进行安装依赖和运行打包的,在看到这里时才发现了问题,解决的方法就是 1.在系统中搜索框输入 Windos PowerShell,点击以管理员身份运行
|
4月前
|
前端开发 小程序 iOS开发
前端组件库——Vant Weapp知识点大全(二)
教程来源 http://lemci.cn Vant Weapp提供50+高质量小程序组件,涵盖按钮、单元格、图标、表单、布局、反馈与展示等核心类型,支持灵活配置、状态控制及iOS兼容优化;内置三种样式定制方案(解除隔离、外部类、CSS变量),兼顾易用性与主题深度定制能力。
|
4月前
|
移动开发 小程序 前端开发
前端组件库——NutUI知识点大全(二)
教程来源 https://htnus.cn/ NutUI提供按钮、单元格、输入框、选择器、Toast/Dialog等核心移动端组件,支持丰富样式、状态与交互;基于Taro实现H5、微信/京东/支付宝/百度小程序“一码五端”跨平台运行,兼顾高性能与高一致性。
|
4月前
|
移动开发 开发框架 前端开发
前端组件库Taro UI知识点大全(一)
教程来源 https://yyvgt.cn/category/jiuwenhua.html Taro UI是京东凹凸实验室打造的Taro多端框架专用UI组件库,支持微信/支付宝/百度小程序、H5及React Native。提供50+开箱即用组件,支持全局/按需引入与主题定制,显著提升跨端开发效率。
|
6月前
|
人工智能 缓存 关系型数据库
Apache Doris 4.0.3 版本正式发布
亲爱的社区小伙伴们,**Apache Doris 4.0.3 版本已正式发布。**此版本新增了在 AI & Search、湖仓一体、查询引擎等方面的能力,并同步进行了多项优化改进及问题修复,欢迎下载体验!
403 8
|
存储 开发工具 git