解决iview weapp的i-input组件在微信开发者工具中不能输入值的问题

  • 2019 年 12 月 26 日
  • 笔记

记录下i-input组件在模拟器中不能输入值问题的原因及解决办法

最近开始用mpvue框架,所以遇到了一些坑,这篇文章记录下关于input组件的一个坑。老司机请略过。 小程序里做一个登录页,输入手机号和密码进行登录。很简单吧,用了iview之后页面很快撸出来了,但是点击输入框敲打键盘之后发现无论输什么东西全部都输不进去,这尼玛什么情况。预览到手机上进行同样的输入竟然是可以的。

于是乎进行了一番搜索,发现有同学遇到了同样的情况 ⬇️ iview weapp 在小程序开发工具中i-input组件不能输入值

看了下自己的登录页,果然是没加maxlength属性

<template>    <div class="main">      <div class="login">        <div class="title">账号登录</div>        <div class="account pr15">          <i-input type="text" @change="accountChange" placeholder="请输入手机号" :value="account" />        </div>        <div class="password pr15">          <i-input            i-class="mt20"            @change="passwordChange"            type="password"            placeholder="请输入密码"            :value="password"          />        </div>        <div class="operate">          <i-button            i-class="login-btn"            @click="loginConfirm"            :loading="loginLoading"            type="primary"            size="small"          >登录</i-button>          <i-button            type="info"            i-class="login-btn"            open-type="getUserInfo"            bind:getuserinfo="wxLogin"            size="small"          >微信快捷登录</i-button>        </div>        <i-toast id="toast" />      </div>    </div>  </template>

然后加了maxlength之后竟然在模拟器就可以正常输入了。

虽然这样就解决了,但是为啥呢,仔细想了想,直觉告诉我是默认值的问题,会不会是因为没有默认值导致maxlength为0使得输入值被清掉了?

我们先来查看一下没设置maxlength时的shadowdom结构

可以发现显示的maxlength值为0 我们再去查看iview的input组件源码

Component({      behaviors: ['wx://form-field'],        externalClasses: ['i-class','t-class'],        properties: {          ...          maxlength: {              type: Number          }      },

可以发现maxlength属性下仅设置了type属性

接着我们尝试给maxlength加一个value来设置组件属性的默认值,这里我们设置为100来尝试下。

···  maxlength: {      type: Number,      value: 100  }  ···

在页面引用标签的地方不用设置maxlength就可以发现在微信开发者工具中也可以输入值了(因为组件里设置的默认值为100)