微信小程序自定义组件之可清除的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 相关文章推荐
js中的escape及unescape函数的php实现代码
Sep 04 Javascript
原生JS操作网页给p元素添加onclick事件及表格隔行变色
Dec 01 Javascript
EasyUI实现二级页面的内容勾选的方法
Mar 01 Javascript
浅谈jquery事件处理
Apr 24 Javascript
浅谈javascript中return语句
Jul 15 Javascript
JS实现仿新浪黄色经典滑动门效果代码
Sep 27 Javascript
Bootstrap下拉菜单效果实例代码分享
Jun 30 Javascript
浅谈js键盘事件全面控制
Dec 01 Javascript
Bootstrap的Carousel配合dropload.js实现移动端滑动切换图片
Mar 10 Javascript
Angular.JS中指令ng-if、ng-show/ng-hide和ng-switch的使用教程
May 07 Javascript
js学习总结之DOM2兼容处理this问题的解决方法
Jul 27 Javascript
vue观察模式浅析
Sep 25 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
php echo 输出字符串函数详解
2010/05/13 PHP
php随机显示指定文件夹下图片的方法
2015/07/13 PHP
Yii框架实现记录日志到自定义文件的方法
2017/05/23 PHP
浅析jQuery对select操作小结(遍历option,操作option)
2013/07/04 Javascript
jQuery 追加元素的方法如append、prepend、before
2014/01/16 Javascript
常用的几段javascript代码分享
2014/03/25 Javascript
jQuery中:last-child选择器用法实例
2014/12/31 Javascript
jQuery获取样式中颜色值的方法
2015/01/29 Javascript
js replace(a,b)之替换字符串中所有指定字符的方法
2016/08/17 Javascript
JavaScript实现的浏览器下载文件的方法
2017/08/09 Javascript
jquery轻量级数字动画插件countUp.js使用详解
2019/10/17 jQuery
精读《Vue3.0 Function API》
2020/05/20 Javascript
[44:39]2014 DOTA2国际邀请赛中国区预选赛 NE VS CNB
2014/05/21 DOTA
[04:16]完美世界DOTA2联赛PWL S2 集锦第一期
2020/11/23 DOTA
Python pickle类库介绍(对象序列化和反序列化)
2014/11/21 Python
Python3通过Luhn算法快速验证信用卡卡号的方法
2015/05/14 Python
python+matplotlib绘制简单的海豚(顶点和节点的操作)
2018/01/02 Python
Python实现PS图像明亮度调整效果示例
2018/01/23 Python
Python实现爬虫爬取NBA数据功能示例
2018/05/28 Python
Python线性拟合实现函数与用法示例
2018/12/13 Python
对django xadmin自定义菜单的实例详解
2019/01/03 Python
django使用django-apscheduler 实现定时任务的例子
2019/07/20 Python
python numpy 常用随机数的产生方法的实现
2019/08/21 Python
解决python 3 urllib 没有 urlencode 属性的问题
2019/08/22 Python
如何使用python写截屏小工具
2020/09/29 Python
瑞典时尚服装购物网站:Miinto.se
2017/10/30 全球购物
老板电器官方购物商城:老板油烟机、燃气灶、消毒柜、电烤箱
2018/05/30 全球购物
乐高西班牙官方商店:LEGO Shop ES
2019/12/01 全球购物
外贸公司实习自我鉴定
2013/09/24 职场文书
2014年城管工作总结
2014/11/20 职场文书
个人原因辞职信模板
2015/05/13 职场文书
乱世佳人观后感
2015/06/08 职场文书
同意报考公务员证明
2015/06/17 职场文书
鲁滨孙漂流记读书笔记
2015/06/30 职场文书
深入讲解Vue中父子组件通信与事件触发
2022/03/22 Vue.js
mysql数据库隔离级别详解
2022/06/16 MySQL