微信小程序自定义组件之可清除的input组件


Posted in Javascript onJuly 17, 2018

最近正在做的一个小程序项目中需要用到一个可清除的输入框控件,为了在项目中使用方便以及方便其他项目直接使用,便封装了一个可清除的input自定义组件。

组件需要达到的需求是:输入框内没有内容时,删除按钮隐藏;当输入框内有内容时,删除按钮显示,点击删除按钮则清空输入框内所有内容。并且还可以设置输入框整体样式以及输入框左侧图标。

明确了需求之后,就可以开始着手实现了。

首先,在目标目录下新建一个自定义组件

微信小程序自定义组件之可清除的input组件

建好之后,我们需要来设计布局。根据需求来看,我们只需要三个组件:两个image和一个input。左边一个image提示图标,然后一个input输入框,最后一个image删除按钮。我们要把尽可能多的数据设置成可以修改的绑定数据,提高自定义组件的可扩展性。

最终确定的wxml布局文件如下:

<view class='input-class'>
   <image src='{{inputIcon}}' mode="scaleToFill" class='icon-class'></image>
   <input placeholder='{{inputHint}}' bindconfirm='{{confirmTap}}' style='flex:1;width:100%;padding-left:12rpx;' bindinput='inputListener' bindconfirm='inputConfirm' value='{{inputValue}}' type='{{inputType}}' password='{{isPassword}}' confirm-type='{{confirmType}}'></input>
   <image class="{{isClearShow?'clearImgShow':'clearImgHide'}}" src='clear.png' bindtap='clearTap' mode='widthFix'></image>
</view>

然后,我们就要来设置组件的一些属性和监听方法了。小程序的组件属性列表是定义在.js文件的properties里的。把需要暴露出去并可以修改的属性都写在这里面。其语法示例如下:

properties: {
  myProperty: { // 属性名
   type: String, // 类型(必填),目前接受的类型包括:String, Number, Boolean, Object, Array, null(表示任意类型)
   value: '', // 属性初始值(可选),如果未指定则会根据类型选择一个
   observer: function(newVal, oldVal, changedPath) {
     // 属性被改变时执行的函数(可选),也可以写成在methods段中定义的方法名字符串, 如:'_propertyChange'
     // 通常 newVal 就是新设置的数据, oldVal 是旧数据
   }
  },
  myProperty2: String // 简化的定义方式
 }

我的属性列表如下:

/**
   * 组件的属性列表
   */
   properties: {
     inputHint: {
        type: String,
        value: '搜索'
     },
     inputIcon: {
        type: String,
        value: 'search.png'
     },
     inputType: {
        type: String,
        value: 'text'
     },
     isPassword: {
        type: Boolean,
        value: false
     },
     confirmType: {
        type: String,
        value: "done"
     }
   }

完成了属性列表的编写之后,接下来我们需要为自定义组件添加监听事件。

 事件系统是组件间通信的主要方式之一。自定义组件可以触发任意的事件,引用组件的页面可以监听这些事件。

监听以及触发事件的语法是这样的:

//触发事件
//自定义组件触发事件时,需要使用 triggerEvent 方法,指定事件名、detail对象和事件选项
methods: {
  onTap: function(){
   var myEventDetail = {} // detail对象,提供给事件监听函数
   var myEventOption = {} // 触发事件的选项
   this.triggerEvent('myevent', myEventDetail, myEventOption)
  }
 }
//监听事件
<!-- 当自定义组件触发“myevent”事件时,调用“onMyEvent”方法 -->
<component-tag-name bindmyevent="onMyEvent" />
<!-- 或者可以写成 -->
<component-tag-name bind:myevent="onMyEvent" />

这里我们需要设置的触发事件有,输入框的输入事件以及输入框的确认事件。通过 triggerEvent 方法指定事件名以及事件触发事件参数

/**
   * 组件的方法列表
   */
   methods: {
     inputListener: function (e) {
        var value = e.detail.value;
        var cursor = e.detail.cursor;
        if (value === null || value === undefined || value.length === 0) {
          this.setData({
             isClearShow: false
          });
        } else {
          this.setData({
             isClearShow: true
          });
        }
        var detail = {
          value: value,
          cursor: cursor
        };
        this.triggerEvent('inputListener', detail);
     },
     inputConfirm: function (e) {
        var value = e.detail.value;
        var detail = {
          value: value
        }
        this.triggerEvent('inputConfirm', detail);
     },
     clearTap: function () {
        this.setData({
          isClearShow: false,
          inputValue: ''
        });
     }
   }

以上就已经完成了这个可清除input组件的自定义开发了。现在来看怎么使用这个组件。

首先在需要使用此组件的页面.json文件中设置usingComponents属性来引入这个自定义组件

"usingComponents": {
     //这里是设置的组价标签名称以及组件地址
     "clearInput": "../../components/clearInput/clearInput"
   }

然后,我们就可以在页面中引用这个自定义组件了,引用的方式非常简单,通过我们在上一步设置的标签名称就可以引用了。

<clearInput inputHint='搜索订单' icon-class='common_search_img' input-class='common_search_input' confirmType='search' bind:inputListener='inputListener' bind:inputConfirm='searchEvent' />

最终实现的效果图如下:

微信小程序自定义组件之可清除的input组件

项目GitHub地址:https://github.com/RaoMeng/TemplateOfHotel

总结

以上所述是小编给大家介绍的微信小程序自定义组件之可清除的input组件,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
分享一个自己动手写的jQuery分页插件
Aug 28 Javascript
jQuery on方法传递参数示例
Dec 09 Javascript
Jquery ui datepicker设置日期范围,如只能隔3天【实现代码】
May 04 Javascript
vuejs在解析时出现闪烁的原因及防止闪烁的方法
Sep 19 Javascript
javascript中setAttribute兼容性用法分析
Dec 12 Javascript
postman+json+springmvc测试批量添加实例
Mar 31 Javascript
vue实现个人信息查看和密码修改功能
May 06 Javascript
vue+element加入签名效果(移动端可用)
Jun 17 Javascript
通过javascript实现扫雷游戏代码实例
Feb 09 Javascript
mpvue网易云短信接口实现小程序短信登录的示例代码
Apr 03 Javascript
JS监听组合按键思路及实现过程
Apr 17 Javascript
vue+canvas实现移动端手写签名
May 21 Javascript
微信小程序倒计时功能实例代码
Jul 17 #Javascript
详解vue+webpack+express中间件接口使用
Jul 17 #Javascript
微信小程序实现默认第一个选中变色效果
Jul 17 #Javascript
Vue2.X 通过AJAX动态更新数据
Jul 17 #Javascript
浅谈Angularjs中不同类型的双向数据绑定
Jul 16 #Javascript
微信小程序实现循环动画效果
Jul 16 #Javascript
mpvue 如何使用腾讯视频插件的方法
Jul 16 #Javascript
You might like
冰滴咖啡制作步骤
2021/03/03 冲泡冲煮
php比较相似字符串的方法
2015/06/05 PHP
PHP守护进程化在C和PHP环境下的实现
2017/11/21 PHP
PHP基于pdo的数据库操作类【可支持mysql、sqlserver及oracle】
2018/05/21 PHP
JavaScript中的事件处理
2008/01/16 Javascript
Js event事件在IE、FF兼容性问题
2011/01/01 Javascript
在jquery中处理带有命名空间的XML数据
2011/06/13 Javascript
alert和confirm功能介绍
2014/05/21 Javascript
深入理解JavaScript编程中的原型概念
2015/06/25 Javascript
终于实现了!精彩的jquery弹幕效果
2016/07/18 Javascript
jQuery dataTables与jQuery UI 对话框dialog的使用教程
2016/09/02 Javascript
DOM 事件的深入浅出(二)
2016/12/05 Javascript
微信小程序 Button 组件详解及简单实例
2017/01/10 Javascript
JS获取子、父、兄节点方法小结
2017/08/14 Javascript
详解wow.js中各种特效对应的类名
2017/09/13 Javascript
Vue 中的compile操作方法
2018/02/26 Javascript
微信小程序左滑删除功能开发案例详解
2018/11/12 Javascript
微信小程序MUI侧滑导航菜单示例(Popup弹出式,左侧滑动,右侧不动)
2019/01/23 Javascript
小程序红包雨的实现示例
2019/02/19 Javascript
vue接通后端api以及部署到服务器操作
2020/08/13 Javascript
[00:56]2014DOTA2国际邀请赛 DK、iG 赛前探访
2014/07/10 DOTA
在Python程序中进行文件读取和写入操作的教程
2015/04/28 Python
python 获取图片分辨率的方法
2019/01/08 Python
Python3.5实现的罗马数字转换成整数功能示例
2019/02/25 Python
win10从零安装配置pytorch全过程图文详解
2020/05/08 Python
python实现定时发送邮件到指定邮箱
2020/12/23 Python
HTML5表格_动力节点Java学院整理
2017/07/11 HTML / CSS
HTML5 canvas基本绘图之绘制线条
2016/06/27 HTML / CSS
加拿大床上用品、家居装饰、厨房和浴室产品购物网站:Linen Chest
2018/06/05 全球购物
英国索普公园票务和酒店套餐:Thorpe Breaks
2019/09/14 全球购物
高中军训感想800字
2014/02/23 职场文书
应聘销售主管的求职信
2014/04/26 职场文书
学校社会实践活动总结
2014/07/03 职场文书
2015年世界无烟日活动总结
2015/02/10 职场文书
上甘岭观后感
2015/06/10 职场文书
详解Java ES多节点任务的高效分发与收集实现
2021/06/30 Java/Android