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

简介: 教程来源 http://lemci.cn Vant Weapp提供50+高质量小程序组件,涵盖按钮、单元格、图标、表单、布局、反馈与展示等核心类型,支持灵活配置、状态控制及iOS兼容优化;内置三种样式定制方案(解除隔离、外部类、CSS变量),兼顾易用性与主题深度定制能力。

三、核心组件详解

Vant Weapp提供了超过50个高质量组件,以下是开发中最常用的核心组件及其详细用法。

3.1 基础组件
3.1.1 Button按钮组件
Button是用户交互中最基础的组件,Vant Weapp提供了丰富的样式和状态。

<!-- 按钮类型 -->
<van-button type="primary">主要按钮</van-button>
<van-button type="default">默认按钮</van-button>
<van-button type="warning">警告按钮</van-button>
<van-button type="danger">危险按钮</van-button>
<van-button type="info">信息按钮</van-button>

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

<!-- 按钮状态 -->
<van-button disabled>禁用按钮</van-button>
<van-button loading>加载按钮</van-button>

<!-- 块级按钮 -->
<van-button block>块级按钮</van-button>

<!-- 方形按钮 -->
<van-button square>方形按钮</van-button>

<!-- 自定义颜色 -->
<van-button color="#7232dd">自定义颜色按钮</van-button>

Button组件核心属性说明:type定义按钮的视觉类型;size控制按钮尺寸;disabled使按钮不可交互;loading显示加载动画;block使按钮宽度占满父容器;square使按钮无圆角。

3.1.2 Cell单元格组件
Cell是列表展示的基础组件,适用于信息展示和页面导航。

<!-- 基础单元格 -->
<van-cell title="单元格标题" value="单元格内容" />

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

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

<!-- 带描述的单元格 -->
<van-cell title="单元格" label="描述信息" value="内容" />

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

<!-- 自定义内容 -->
<van-cell title="单元格" value="内容" label="描述信息" border>
  <view class="custom-content">自定义内容</view>
</van-cell>

Cell组件核心特性:支持左侧图标(icon),支持右侧箭头(is-link),支持辅助描述(label),支持分组展示(van-cell-group)。

3.1.3 Icon图标组件
Vant Weapp内置了大量常用的图标,使用方便。

<!-- 基础图标 -->
<van-icon name="chat" />

<!-- 自定义颜色和大小 -->
<van-icon name="chat" color="red" size="30px" />

<!-- 使用图片URL -->
<van-icon name="https://example.com/icon.png" />

<!-- 图标徽标 -->
<van-icon name="chat" dot />
<van-icon name="chat" badge="5" />

Vant Weapp内置了超过200个高质量的图标,涵盖了移动端开发的常见场景。

3.2 表单组件
3.2.1 Field输入框
Field是表单交互的核心组件,支持多种输入类型和验证功能。

<!-- 基础输入框 -->
<van-field value="{
  { value }}" placeholder="请输入内容" bind:change="onChange" />

<!-- 去除iOS默认内边距 -->
<van-field
  value="{
  { value }}"
  placeholder="请输入内容"
  disable-default-padding
/>

<!-- 配合always-embed实现同层渲染(iOS兼容)-->
<van-field
  value="{
  { value }}"
  placeholder="请输入内容"
  always-embed
/>

<!-- 文本域 -->
<van-field
  value="{
  { value }}"
  type="textarea"
  placeholder="请输入内容"
  rows="3"
  autosize
/>

<!-- 带验证状态的输入框 -->
<van-field
  value="{
  { value }}"
  placeholder="请输入用户名"
  error-message="用户名格式不正确"
/>

<!-- 密码输入框 -->
<van-field
  value="{
  { password }}"
  type="password"
  placeholder="请输入密码"
  right-icon="eye-o"
/>

Field组件的重要注意事项:

iOS平台输入框默认存在内边距(padding),可通过disable-default-padding属性去除

配合always-embed属性可实现iOS同层渲染,解决focus时切换至非同层状态的问题

使用auto-height属性解决textare在iOS上自动换行时高度计算偏差的问题

3.2.2 Checkbox复选框

<!-- 基础复选框 -->
<van-checkbox value="{
  { checked }}" bind:change="onChange">复选框</van-checkbox>

<!-- 复选框组 -->
<van-checkbox-group value="{
  { checkedList }}" max="{
  { 2 }}" bind:change="onChange">
  <van-checkbox name="a">选项一</van-checkbox>
  <van-checkbox name="b">选项二</van-checkbox>
  <van-checkbox name="c">选项三</van-checkbox>
</van-checkbox-group>

max属性用于限制最大可选数量,超出后其他复选框自动禁用。

3.2.3 Radio单选框

<van-radio-group value="{
  { radio }}" bind:change="onChange">
  <van-radio name="a">选项一</van-radio>
  <van-radio name="b">选项二</van-radio>
  <van-radio name="c">选项三</van-radio>
</van-radio-group>

3.2.4 Switch开关

<van-switch checked="{
  { checked }}" size="22px" bind:change="onChange" />

3.3 布局组件
3.3.1 Grid宫格
Grid组件提供了灵活的网格布局能力,支持自定义列数、间距和内容排版。

<van-grid column-num="3" border>
  <van-grid-item icon="home-o" text="首页" />
  <van-grid-item icon="search" text="搜索" />
  <van-grid-item icon="friends-o" text="朋友" />
  <van-grid-item icon="setting-o" text="设置" />
</van-grid>

在各种屏幕尺寸下均能保持良好的布局一致性,文字溢出时会自动省略处理。

3.3.2 Tabbar标签栏
Tabbar组件是小程序底部导航的常用实现方式,支持多种自定义配置。

<van-tabbar active="{
  { active }}" bind:change="onChange">
  <van-tabbar-item icon="home-o">首页</van-tabbar-item>
  <van-tabbar-item icon="search">搜索</van-tabbar-item>
  <van-tabbar-item icon="friends-o">朋友</van-tabbar-item>
  <van-tabbar-item icon="setting-o">设置</van-tabbar-item>
</van-tabbar>

使用建议:结合自定义tabBar功能时,需注意页面栈管理问题。

3.4 反馈组件
3.4.1 Dialog弹窗

<van-dialog title="标题" show="{
  { show }}" bind:close="onClose">
  <view>弹窗内容</view>
</van-dialog>

通过Confirm和Cancel按钮进行交互,在7.0.15以下的微信版本中,关闭动画存在已知卡顿问题。

3.4.2 Toast提示

import Toast from '@vant/weapp/toast/toast';

// 显示纯文本提示
Toast('提示内容');

// 显示不同状态的提示
Toast.success('操作成功');
Toast.fail('操作失败');
Toast.loading('加载中...');

// 配置Toast参数
Toast({
  message: '自定义提示',
  duration: 3000,
  position: 'top',
});

Toast使用的是函数式调用,这是Vant Weapp内置的全局方法,无需在页面JSON中单独注册。

3.4.3 Notify消息通知

import Notify from '@vant/weapp/notify/notify';

Notify({ type: 'primary', message: '通知内容' });
Notify({ type: 'success', message: '成功通知' });
Notify({ type: 'danger', message: '错误通知' });

3.5 展示组件
3.5.1 Image图片
增强版的Image标签,支持图片懒加载与加载失败提示。

<van-image
  src="{
  { src }}"
  width="100"
  height="100"
  fit="cover"
  round
  lazy-load
  show-error
  show-loading
/>

lazy-load属性可以延迟加载非可视区域的图片,极大提升长列表滚动性能。

3.5.2 Grid宫格(业务布局)
Grid宫格组件适合用于展示功能入口、商品分类等场景。

<van-grid column-num="2">
  <van-grid-item icon="photo-o" text="图片" />
  <van-grid-item icon="video-o" text="视频" />
  <van-grid-item icon="gift-o" text="礼物" />
  <van-grid-item icon="comment-o" text="评论" />
</van-grid>

3.5.3 Skeleton骨架屏
骨架屏可以在页面数据加载完成前展示占位区块,显著改善用户对加载等待的感知。

<van-skeleton title avatar row="3" loading="{
  { loading }}">
  <!-- 真实内容 -->
  <view>页面加载完成后的真实内容</view>
</van-skeleton>

虽然骨架屏本身并不真正减少加载时间,但它能通过视觉过渡让用户感觉加载更快,这是一种感知性能优化的经典手段。

四、样式定制详解

Vant Weapp的一个显著优势是其强大的样式定制能力。它提供了三种不同层次的定制方案,满足从简单调整到深度主题定制的各种需求。

4.1 方案一:解除样式隔离
Vant Weapp的所有组件都默认开启了addGlobalClass: true,以接受外部样式的影响。开发者可以直接在页面的样式文件中覆盖组件样式。

在页面中覆盖样式:

<van-button type="primary">主要按钮</van-button>
/* page.wxss */
.van-button--primary {
  font-size: 20px;
  background-color: #4c6ef5;
  border-radius: 8px;
}

在自定义组件中覆盖样式:

需要在自定义组件的JS文件中开启styleIsolation: 'shared'选项,解除样式隔离限制:

// components/custom-component.js
Component({
  options: {
    styleIsolation: 'shared',
  },
});
/* components/custom-component.wxss */
.van-button--primary {
  padding: 0 20px;
  height: 44px;
}

styleIsolation: 'shared'表示组件的样式将可以相互影响,外部样式类可以影响组件内部。

4.2 方案二:使用外部样式类
Vant Weapp为部分组件开放了外部样式类(externalClasses)接口,允许开发者通过传入自定义类名的方式覆盖组件内部特定元素的样式。

<van-cell
  title="商品价格"
  value="¥99.00"
  title-class="custom-title"
  value-class="custom-value"
/>
.custom-title {
  color: #333333;
  font-weight: 500;
}

.custom-value {
  color: #ff4d4f;
  font-size: 16px;
}

常用组件的外部样式类:
image.png
外部样式类的优先级可能低于组件默认样式,因此使用时建议添加!important以保证优先级。

4.3 方案三:使用CSS变量(主题定制)
相较于前两种方法,使用CSS变量支持在页面或应用级别对多个组件的样式做批量修改,更适合进行主题样式的定制。

定制单个组件:

可以在wxss中为组件设置CSS变量,或通过style属性来设置:

<van-button class="my-button">默认按钮</van-button>
.my-button {
  --button-border-radius: 10px;
  --button-default-color: #f2f3f5;
}

通过style属性动态设置(可实现运行时主题切换):

<van-button style="{
  { buttonStyle }}">默认按钮</van-button>
Page({
  data: {
    buttonStyle: `
      --button-border-radius: 10px;
      --button-default-color: #4c6ef5;
    `,
  },
  onLoad() {
    setTimeout(() => {
      this.setData({
        buttonStyle: `
          --button-border-radius: 2px;
          --button-default-color: #fa541c;
        `,
      });
    }, 2000);
  },
});

定制多个组件:

用一个container节点包裹住需要定制的组件,并将CSS变量设置在container节点上:

<view class="container">
  <van-button bind:click="onClick">默认按钮</van-button>
  <van-toast id="van-toast" />
</view>
.container {
  --button-border-radius: 10px;
  --button-default-color: #f2f3f5;
  --toast-max-width: 100px;
  --toast-background-color: pink;
}

定制全局主题:

在app.wxss中写入CSS变量,即可对全局生效:

page {
  --button-border-radius: 8px;
  --button-default-color: #323233;
  --button-primary-color: #ffffff;
  --button-primary-background-color: #1989fa;
}

4.4 样式覆盖的优先级规则
当多种样式定制方案同时使用时,优先级规则如下:

行内样式 > CSS变量 > 外部样式类 > 解除样式隔离的全局样式

合理利用优先级规则可以避免不必要的样式冲突。在实践中,推荐优先使用CSS变量进行主题级定制,因为它对组件的侵入最小,维护起来也最方便。

4.5 避免样式污染
为了避免样式污染影响其他页面或组件,建议在定制样式时添加自定义前缀,或使用CSS模块化方案:

/* 推荐:添加自定义前缀,只影响当前页面 */
.my-page .van-button--primary {
  background-color: #4c6ef5;
}

/* 不推荐:全局样式可能影响其他页面 */
.van-button--primary {
  background-color: #4c6ef5;
}

来源:
http://lemci.cn

相关文章
|
1月前
|
存储 弹性计算 安全
阿里云服务器经济型e实例介绍:实例性能、适用场景、收费标准与最新活动价格参考
阿里云经济型e实例是面向预算有限的个人开发者、学生及初创小微企业的入门级云服务器,以“99元一年,新购续费同价”为亮点。它采用共享架构,搭载Intel处理器,支持灵活的内存配比及ESSD Entry云盘,提供稳定的基础算力,适用于中小型网站、开发测试等轻量级应用。其性能定位清晰,价格实惠,长期使用成本低,是寻求高性价比云服务器的务实之选。
393 4
|
1月前
|
JSON 小程序 前端开发
前端组件库——Vant Weapp知识点大全
教程来源 http://oplhc.cn/ Vant Weapp是有赞官方打造的高星(1.1w+)微信小程序UI组件库,轻量、稳定、高性能,含50+组件与CSS变量主题系统,支持按需引入与深度定制,是小程序开发首选开源UI方案。
|
1月前
|
人工智能 移动开发 小程序
2026年在线教育系统发展趋势:多端融合与源码化部署成主流
2026年在线教育行业正在从流量竞争转向系统能力竞争,多端融合、在线教育系统源码部署、AI能力嵌入与私域运营整合成为核心趋势。本文从教育培训系统开发视角,解析Web端、APP、小程序一体化架构,以及私有化部署为何成为主流选择,为机构搭建网校平台和选择在线教育系统提供趋势参考。
|
20天前
|
缓存 网络协议 测试技术
【免费CDN】阿里云ESA免费版配置,10分钟搞定
阿里云ESA免费版0元开通!含CDN加速、DDoS防护、WAF拦截、Bot管理及HTTPS支持,适合个人站与测试环境。6步完成:领额度→加站点→选免费版→配源站→改DNS→验证生效,全程无需付费。
【免费CDN】阿里云ESA免费版配置,10分钟搞定
|
15天前
|
消息中间件 数据可视化 API
阿里云短信服务怎么接入?从签名、模板、API 到发送回执,一文讲清楚
本片文章将围绕阿里云短信服务的完整接入链路,拆解从资质申请、签名审核、模板配置、运营商报备,到 API 发送和状态回执的关键步骤,帮助产品经理、运营人员、技术负责人和开发者快速理解短信服务接入流程,提前做好上线准备。
219 5
|
17天前
|
机器学习/深度学习 自然语言处理 搜索推荐
大模型应用开发核心认知与技巧指引:从提示工程到智能Agent的完整实践.111
本文系统讲解大模型应用开发核心路径:从API调用基础,到提示工程(结构化指令、Few-shot、思维链CoT),再到高阶智能Agent(感知-思考-行动-反馈闭环)。强调“目标式编程”范式转变,聚焦如何驾驭大模型解决非结构化问题,助力开发者快速落地实用应用。
213 6
|
人工智能 运维 关系型数据库
智能运维+多模型服务能力,阿里云 RDS AI 助手旗舰版正式上线!
RDS AI 助手旗舰版在 RDS AI 助手专业版智能运维能力的基础上,提供灵活模型选择、智能模型路由、多模型灾备、API Key 集成等更自主可控、灵活便捷的模型服务,并支持纳管运维各类环境部署的数据库。
智能运维+多模型服务能力,阿里云 RDS AI 助手旗舰版正式上线!
|
1月前
|
JavaScript Android开发 数据安全/隐私保护
以cocos3.8.8开发的游戏为例商业实战项目举例cocos打包ios苹果安装包ipa完整详细教程-优雅草卓伊凡
本教程基于Cocos Creator 3.8.8,详解iOS IPA打包全流程:含环境配置(Xcode、Apple开发者账号)、构建面板设置(包名、屏幕方向、签名等)、Xcode工程配置、Archive归档及IPA导出,并附常见报错解决方案,理论+实操结合,助力开发者高效上架。
263 8
以cocos3.8.8开发的游戏为例商业实战项目举例cocos打包ios苹果安装包ipa完整详细教程-优雅草卓伊凡
|
1月前
|
机器学习/深度学习 数据采集 人工智能
跨越鸿沟:传统产品经理如何迈向AI产品经理的黄金赛道
跨越鸿沟:传统产品经理如何迈向AI产品经理的黄金赛道
|
16天前
|
机器学习/深度学习 IDE 数据可视化
【2026最新】Spyder安装和使用保姆级教程(附安装包+图文步骤)
Spyder(Scientific Python Development Environment)是一款免费开源的Python IDE,专为数据科学、科学计算与机器学习设计。它融合代码编辑、调试、变量浏览与IPython交互式控制台、数据可视化等功能,界面类MATLAB,开箱即用NumPy、Pandas、Matplotlib等库,Anaconda用户可一键启用。(239字)