填坑😋:vant的stepper步进器有点小坑

1,091 阅读5分钟

前言

  • 常网IT源码上线啦!
  • 本篇录入Vue专栏,希望能祝君拿下Offer一臂之力,各位看官感兴趣可移步🚶。
  • 有人说面试造火箭,进去拧螺丝;其实个人觉得问的问题是项目中涉及的点 || 热门的技术栈都是很好的面试体验,不要是旁门左道冷门的知识,实际上并不会用到的。
  • 接下来想分享一些自己在项目中遇到的技术选型以及问题场景。

心理咨询说一个人怎样才能发生真正的改变。
就是,当他再次到达那个“十字路口”,他不像以前那样直接走向左边,而是开始思考,自己是不是可以选右边。

1.jpg

人间烟火味~

7月新出炉文:

🤡官:你有遇到很难排查的问题吗

思想:封装表格渲染动态组件🥰(万num)

vue多语言国际化实战

一、场景

相信大家都玩过vant库。

我会用最通俗易懂的话语描述的😊,相信大家能看懂的。

我有一个表单,表单里面有一个步进器,初始化进来的时候,传入数值为null,我想要的效果是为null,但现在前端显示0,如下图所示:

image.webp

二、分析

目前的代码:

<van-stepper
    v-model="fild.value"
    :step="fild.step"
    :min=" fild.min"
    :max="fild.max"
    :decimal-length="fild.decimalLength"
  />

为什么我们现在前端展示的是0?

因为前端拿到值后,会转换一下,如果是null的话会设置为0。

如果前端不转换的话,按照文档上,默认值应该是1

image.webp

那么,我们现在的需求是:数据为null,展示null。

好。

我们看一下文档有没有相关api。

2.1 default-value

我们可以看到有个属性default-value:初始值,当 v-model 为空时生效

image.webp

我按照文档设置了之后。:default-value="null"

<van-stepper
    v-model="fild.value"
    :step="fild.step"
    :min=" fild.min"
    :max="fild.max"
    :decimal-length="fild.decimalLength"
    :default-value="null"
  />

无效。页面不起作用。

default-value=""呢?

很遗憾,也无效🤣

我怀疑他这个属性,只是能设置数值,无法设置null这些字符。

2.2 allow-empty

在我山重水复疑无路的时候,我又翻了一下文档。

看到了一个新属性,allow-empty:是否允许输入的值为空

这不就是我想要的属性效果吗。

image.webp

我当时看到是有个疑惑的:

default-value:初始值,当 v-model 为空时生效

allow-empty:是否允许输入的值为空

感觉这两个属性,要先设置allow-empty,default-value才生效的样子。

这个后面说。

14.jpg

我正欣喜万分开始尝试,看到版本号2.9.1才能使用

我默默的回去看了一下自己的版本号"vant": "^2.5.8",

当我在犹豫要不要更新的时候,产品大佬又狂追问,修复了吗?

来不及思考了🤠,直接

cnpm install vant@^2.13.2 --save

image.webp

编程,添加:allow-empty="true"

<van-stepper
    v-model="fild.value"
    :step="fild.step"
    :min=" fild.min"
    :max="fild.max"
    :decimal-length="fild.decimalLength"
    :default-value="null"
    :allow-empty="true"
  />

貌似不太行。

后面发现是default-value=“”就可以了。

其实一开始不生效的时候,怀疑过min是不是应该设置null,才生效。

遇到问题不要慌,先看文档。

❣️真好,步进器可以了。

15.jpg

2.3 cascader

当我继续看其他案例的组件的时候,我发现van-cascader组件竟然报错了。

image.webp

看看代码写法

fe4c3d7b18498bbde4ba1242cd6ed7f.webp

我为什么会去看vant的其他组件?
这是直觉,这也是我不太敢在已有项目升级库的原因,容易引起副作用。
多检查,准没错!

我开始分析这个错误。

说我没有安装这个组件,但这是vant库的呀!

我在局部组件尝试一下引入。

<template>
  <van-cascader v-model="value" :options="options" />
</template>

<script>
import { Cascader as VanCascader } from 'vant';

export default {
  components: {
    VanCascader,
  },
  data() {
    return {
      value: [],
      options: [
        // 你的选项数据
      ],
    };
  },
};
</script>

没用。

9.png

🥳难道?

我相信大家和我想的一样,这个版本的这个组件有问题。

或者说根本还没有这个组件。

我马上去看了一下源码。

github.com/youzan/vant…

根本都没有找到cascader,震惊了。

image.webp

虽然修复了stepper组件可以设置为空了。

但cascader却不能用了,这显然不是我想要的。

我一开始想的解决方案是:

之前的版本是"vant": "^2.5.8",(此版本有cascader正常使用)

2.9.1没有(此时的package的版本)

我想拷贝2.5.8的版本到2.9.1里面,手动添加。

2.4 vant源码

当然,如果嫌麻烦的话,我还有B Plan。

继续更新vant的版本,直到有van-cascader组件。

那么问题来了,我怎么知道哪个版本有?难不成跨大版本到3吗?

那倒不至于,答案前面已经有说过了。

🤗在源码中找!

这里有很多版本,作者每上一个版本都会打一个tags标签,公司也有用这种分支管理的。

image.webp

找呀找,我找到大版本2的最后一个版本。

2.13.2:github.com/youzan/vant…

终于找到你小子了。

image.webp

16.jpg

其实,为什么我会知道这个2.13.2版本呢?

因为在官网有提过大版本2的最后一个版本2.13.2

vant-ui.github.io/vant/v2/#/z…

image.webp

既然前方路已开,那便前程无忧。

安装升级:cnpm install vant@^2.13.2 --save

安装完后,刷新页面无效,你慌了吗?

一点都不慌,因为你还没有重新run serve,升级了依赖,如果不重新run,webpack读的还是之前的依赖,这就是缓存的作用,让你编译更快,不然每次都要重新编译,就有点小慢了。

重新启动后,成功解决了。

两者都开心。

天女撒花🌷🌷~

后记

遇到问题不要慌,先看文档,再凭借自己的经验。

相信自己的直觉~

如果有其他更好的方法也欢迎评论区见,这里提供的只是诸多方法之一。

最后,祝君能拿下满意的offer🥰

我是Dignity_呱,来交个朋友呀,有朋自远方来,不亦乐乎呀!深夜末班车

👍 如果对您有帮助,您的点赞是我前进的润滑剂。

以往推荐

小小导出,我大前端足矣!

靓仔,说一下keep-alive缓存组件后怎么更新及原理?

面试官问我watch和computed的区别以及选择?

面试官问我new Vue阶段做了什么?

前端仔,快把dist部署到Nginx上

多图详解,一次性啃懂原型链(上万字)

Vue-Cli3搭建组件库

Vue实现动态路由(和面试官吹项目亮点)

项目中你不知道的Axios骚操作(手写核心原理、兼容性)

VuePress搭建项目组件文档

原文链接

juejin.cn/post/738730…