文章目录

  • 🌟前言
  • 🌟Vant介绍
  • 🌟Vant安装
    • 🌟npm 支持
  • 🌟使用Vant
    • 🌟引入组件
    • 🌟页面使用组件
  • 🌟样式覆盖
    • 🌟介绍
    • 🌟解除样式隔离
    • 🌟使用外部样式类
    • 🌟使用 CSS 变量
  • 🌟定制主题
    • 🌟定制单个组件的主题样式
    • 🌟定制多个组件的主题样式
    • 🌟定制全局主题样式
  • 🌟写在最后

走进小程序【八】微信小程序中使用【Vant组件库】

🌟前言

哈喽小伙伴们,我们做前端的同学在日常开发当中一定收藏了好多好多的前端组件库,这些组件库不仅可以帮助我们快速的搭建我们的程序,使用的同时也提供了好多实用的API给我们。那么开发小程序的时候我们有没有可以使用的组件库呢?当然有了,今天给大家讲解一下在小程序中如何使用 Vant组件库 。话不多说,咱们直接开整!🤘

🌟Vant介绍

走进小程序【八】微信小程序中使用【Vant组件库】
Vant 是一个轻量、可靠的移动端组件库,于 2017 年开源。

目前 Vant 官方提供了 Vue 2 版本、Vue 3 版本和微信小程序版本,并由社区团队维护 React 版本和支付宝小程序版本。

扫描下方小程序二维码,体验组件库示例:
走进小程序【八】微信小程序中使用【Vant组件库】

为了便于预览组件效果,本文档的右侧内嵌了 H5 版的 Vant页面作为参考。在实际使用中,个别组件的表现可能与小程序上的表现有差异,请以实际效果为准。

🌟Vant安装

🌟npm 支持

在小程序中使用npm包前,需先构建 npm

1. 项目初始化
在小程序项目里新建终端,输入一下命令,来生成我们的 package.json,填写项目信息:

npm init

2. 安装Vant

# 通过 npm 安装
npm i @vant/weapp -S --production
# 通过 yarn 安装
yarn add @vant/weapp --production
# 安装 0.x 版本
npm i vant-weapp -S --production

3. 修改 app.json

app.json 中的"style": "v2" 去除,小程序的新版基础组件强行加上了许多样式,难以覆盖,不关闭将造成部分组件样式混乱。

4.修改 project.config.json

开发者工具创建的项目,miniprogramRoot 默认为 miniprogrampackage.json 在其外部,npm 构建无法正常工作。 需要手动在 project.config.json 内添加如下配置,使开发者工具可以正确索引到 npm 依赖的位置。

{
  ...
  "setting": {
    ...
    "packNpmManually": true,
    "packNpmRelationList": [
      {
        "packageJsonPath": "./package.json",
        "miniprogramNpmDistDir": "./"
      }
    ]
  }
}

注意: 由于目前新版开发者工具创建的小程序目录文件结构问题,npm构建的文件目录为miniprogram_npm,并且开发工具会默认在当前目录下创建miniprogram_npm的文件名,所以新版本的miniprogramNpmDistDir配置为'./'即可

5.构建 npm 包

打开微信开发者工具,点击 工具 -> 构建 npm,构建完成后,即可引入组件。

走进小程序【八】微信小程序中使用【Vant组件库】
等待构建完成,完成后会有以下弹框:

走进小程序【八】微信小程序中使用【Vant组件库】
6.typescript 支持

如果你使用 typescript 开发小程序,还需要做如下操作,以获得顺畅的开发体验。

安装 miniprogram-api-typings

# 通过 npm 安装
npm i -D miniprogram-api-typings
# 通过 yarn 安装
yarn add -D miniprogram-api-typings

tsconfig.json 中增加如下配置,以防止 tsc 编译报错。
请将path/to/node_modules/@vant/weapp修改为项目的 node_modules@vant/weapp所在的目录。

{
  ...
  "compilerOptions": {
    ...
    "baseUrl": ".",
    "types": ["miniprogram-api-typings"],
    "paths": {
      "@vant/weapp/*": ["path/to/node_modules/@vant/weapp/dist/*"]
    },
    "lib": ["ES6"]
  }

🌟使用Vant

🌟引入组件

Button 组件为例,只需要在app.jsonindex.json中配置 Button 对应的路径即可。 所有组件文档中的引入路径均以 npm 安装为例,如果你是通过下载源代码的方式使用 @vant/weapp,请将路径修改为项目中@vant/weapp 所在的目录

// 通过 npm 安装
// app.json
"usingComponents": {
  "van-button": "@vant/weapp/button/index"
}
// 通过下载源码使用 es6版本
// app.json
"usingComponents": {
  "van-button": "path/to/@vant/weapp/dist/button/index"
}
// 通过下载源码使用 es5版本
// app.json
"usingComponents": {
  "van-button": "path/to/@vant/weapp/lib/button/index"
}

🌟页面使用组件

引入组件后,可以在 wxml 中直接使用组件

<van-button type="primary">按钮</van-button>

🌟样式覆盖

🌟介绍

Vant Weapp 基于微信小程序的机制,为开发者提供了以下 3 种修改组件样式的方法

🌟解除样式隔离

样式隔离的相关背景知识请查阅微信小程序文档

Vant Weapp 的所有组件都开启了addGlobalClass: true以接受外部样式的影响,可以使用如下 2 种方式覆盖组件样式

在页面中使用 Vant Weapp 组件时,可直接在页面的样式文件中覆盖样式

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

在自定义组件中使用 Vant Weapp 组件时,需开启 styleIsolation: 'shared' 选项

<van-button type="primary">主要按钮</van-button>
Component({
  options: {
    styleIsolation: 'shared',
  },
});
.van-button--primary {
  font-size: 20px;
  background-color: pink;
}

🌟使用外部样式类

外部样式类的相关知识背景请查阅微信小程序文档

Vant Weapp 开放了大量的外部样式类供开发者使用,具体的样式类名称可查阅对应组件的“外部样式类”部分。

需要注意的是普通样式类和外部样式类的优先级是未定义的,因此使用时请添加!important以保证外部样式类的优先级。

<van-cell
  title="单元格"
  value="内容"
  title-class="cell-title"
  value-class="cell-value"
/>
.cell-title {
  color: pink !important;
  font-size: 20px !important;
}
.cell-value {
  color: green !important;
  font-size: 12px !important;
}

🌟使用 CSS 变量

Vant Weapp 为部分 CSS 属性开放了基于 CSS 属性的定制方案。

相较于 解除样式隔离 和 使用外部样式类,这种方案支持在页面或应用级别对多个组件的样式做批量修改以进行主题样式的定制。

当然,用它来修改单个组件的部分样式也是绰绰有余的。具体的使用方法请查阅定制主题

🌟定制主题

🌟定制单个组件的主题样式

在 wxss 中为组件设置 CSS 变量

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

或通过 style 属性来设置 CSS 变量,这使你能够轻松实现主题的动态切换

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

🌟定制多个组件的主题样式

与单个组件的定制方式类似,只需用一个 container 节点包裹住需要定制的组件,并将 CSS 变量 设置在 container 节点上

<view class="container">
  <van-button bind:click="onClick">
    默认按钮
  </van-button>
  <van-toast id="van-toast" />
</view>
import Toast from '@vant/weapp/toast/toast';
Page({
  onClick() {
    Toast('我是提示文案,建议不超过十五字~');
  },
});
.container {
  --button-border-radius: 10px;
  --button-default-color: #f2f3f5;
  --toast-max-width: 100px;
  --toast-background-color: pink;
}

🌟定制全局主题样式

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

page {
  --button-border-radius: 10px;
  --button-default-color: #f2f3f5;
  --toast-max-width: 100px;
  --toast-background-color: pink;
}

🌟写在最后

这篇文章给大家讲解了一下在小程序当中如何使用Vant组件库去快速的搭建我们的小程序页面,更多组件以及API请大家持续关注,后面会给大家出一些比较好玩的功能,尽请期待。各位小伙伴让我们 let’s be prepared at all times!

✨原创不易,还希望各位大佬支持一下!
👍 点赞,你的认可是我创作的动力!
⭐️ 收藏,你的青睐是我努力的方向!
✏️ 评论,你的意见是我进步的财富!

发表回复