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

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

🌟前言

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

🌟Vant介绍

c6e8e319935a4724b9c0cbf25d81b86b.png

Vant 是一个轻量、可靠的移动端组件库,于 2017 年开源。

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

扫描下方小程序二维码,体验组件库示例:



717cfedb989b4e078b5af262a2033863.jpg

为了便于预览组件效果,本文档的右侧内嵌了 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,构建完成后,即可引入组件。




41528639a1d9450a858ec4a255dfe52a.png

等待构建完成,完成后会有以下弹框:


e45f245519b64e6989aaef1256109e1c.png

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!




目录
相关文章
|
1月前
|
JSON 小程序 前端开发
终于搞懂了!微信小程序的渲染机制及组件使用
【8月更文挑战第8天】微信小程序的渲染机制及组件使用
66 3
终于搞懂了!微信小程序的渲染机制及组件使用
|
16天前
|
移动开发 小程序 前端开发
|
23天前
|
JSON 小程序 JavaScript
超详细微信小程序开发学习笔记,看完你也可以动手做微信小程序项目
这篇文章是一份全面的微信小程序开发学习笔记,涵盖了从小程序介绍、环境搭建、项目创建、开发者工具使用、文件结构、配置文件、模板语法、事件绑定、样式规范、组件使用、自定义组件开发到小程序生命周期管理等多个方面的详细教程和指南。
|
22天前
|
小程序 前端开发
微信小程序商城,微信小程序微店 【毕业设计参考项目】
文章推荐了一个微信小程序商城项目作为毕业设计参考,该项目在Github上获得18.2k星,提供了详细的使用教程和前端页面实现,适合学习微信小程序开发和作为毕业设计项目。
微信小程序商城,微信小程序微店 【毕业设计参考项目】
|
24天前
|
人工智能 小程序 编译器
Ant Design Mini 问题之Antd Mini 使用小程序函数式组件(functional-mini)来确保组件逻辑适配到双端,如何实现
Ant Design Mini 问题之Antd Mini 使用小程序函数式组件(functional-mini)来确保组件逻辑适配到双端,如何实现
|
24天前
|
小程序 前端开发 API
Ant Design Mini 问题之在微信小程序中,由于不支持slot特性,Ant Design Mini的什么组件功能受到了限制,如何解决
Ant Design Mini 问题之在微信小程序中,由于不支持slot特性,Ant Design Mini的什么组件功能受到了限制,如何解决
|
28天前
|
小程序
|
28天前
|
小程序 开发者
第一个微信小程序的初始化过程、小程序微信开发平台的下载、如何注册一个微信小程序的账号
这篇文章介绍了微信小程序的初始化过程,包括如何注册微信小程序账号、下载微信小程序开发者平台,并指导了新建小程序的详细步骤。
第一个微信小程序的初始化过程、小程序微信开发平台的下载、如何注册一个微信小程序的账号
|
30天前
|
小程序 前端开发 JavaScript
微信小程序实现微信支付(代码和注释很详细)
微信小程序实现微信支付(代码和注释很详细)
|
2月前
|
小程序
跨端技术问题之页面或组件样式在小程序、小程序插件和小程序分包中有什么差异
跨端技术问题之页面或组件样式在小程序、小程序插件和小程序分包中有什么差异