微信小程序自定义组件


Posted in Javascript onAugust 16, 2017

前言

最近接触微信小程序,再次之前公司用的前端框架是vue ,然后对比发现,开发小程序是各种限制,对于开发者非常不友好。各种槽点太多,完全吐槽不过来,所以在此不多说,打算下次专门写一篇文章吐槽一下。本次主要分享下小程序自定义组件的一点思路,小程序官方提供的框架比较简陋,原始,可复用较差,没有实现自定义组件的功能,这让很多使用vue ,react前端开发非常难受。网上存在各种吐槽,也有分享实现自定义组件的方法,但是要么过于复杂,要么是微信小程序升级之后就不兼容,反正是各种坑你没商量。在这分享下本人在项目中是如何实现的,欢迎指正批评,互相学习。

toast自定义组件实现

  • 这里用最简单的toast组件为例子
  • 官方框架只提供了 页面模板功能 : WXML提供模板(template),可以在模板中定义代码片段,然后在不同的地方调用。
  • 但是这个功能不 支持js,样式封装,需要在对应的页面做处理,且模板还有自己的作用域,需要使用data传入。
  • 把功能封装成独立的组件,需要和页面独立,在使用时将组件挂载到对应的页面,所以组件需要传入页面this(Page)对象 ,实现代码如下

目录结构

|------components
        |------toast
                |------toast.js
                |------toast.wxml
                |------toast.wxss

代码

toast.wxml

<template name='toast'>
  <view class="s-toast" wx:if="{{msg}}">
    <view class="s-toast-content">{{msg}}</view>
  </view>
</template>

toast.js

/**
 * toastMsg 必传 提示内容
 * showTime 非必传 显示时间秒
*/
function toast(page, toastMsg, showTime) {
  let timer
  page.setData({ toastMsg })
  showTime = showTime || toastMsg.length / 4
  console.log(showTime)
  clearTimeout(timer)
  timer = setTimeout(() => {
    page.setData({ toastMsg: '' })
    clearTimeout(timer)
  }, showTime * 1000)
}

module.exports = {
  toast: toast,
}
toast.wxss
.s-toast-content {
  position: fixed;
  left: 50%;
  color: #fff;
  width: 500rpx;
  bottom: 120rpx;
  background: hsla(0,0%,7%,.7);
  padding: 15rpx;
  text-align: center;
  -webkit-transform: translateX(-50%);
  transform: translateX(-50%);
  border-radius: 4rpx;
  z-index: 6999;
}

使用方法

1、wxml引用页面模板

2、js 文件引用 toast.js

import { toast } from '../../../project/component/toast/toast.js'

3、调用

toast(this, '填写详细信息')

改进及更多扩展

实际项目中会有toast confirm loading ···等多个通用组件 ,还有大量的业务组件,我们可以把js都引入到一个js文件中,然后在页面加载的时候(onLoad方法)中注册this(page),这样只需要注册一次便可以使用所有的组件,如

toast(this,'填写详细信息'')

变成

toast('填写详细信息'')

同样的思路,我们可以实现类似vue中混合(mixin)的功能,在业务复杂的项目中,大大提高代码的可复用 性和可维护性。

公司小程序只有我一个人开发,不存在多人协作开发小程序的情况,在这方面下的功夫不多。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
onmouseover和onmouseout的一些问题思考
Aug 14 Javascript
了解Javascript的模块化开发
Mar 02 Javascript
JavaScript模拟实现键盘打字效果
Jun 29 Javascript
基于jquery插件编写countdown计时器
Jun 12 Javascript
js实现抽奖效果
Mar 27 Javascript
Angular2使用jQuery的方法教程
May 28 jQuery
微信小程序实现点击按钮修改view标签背景颜色功能示例【附demo源码下载】
Dec 06 Javascript
Vue安装浏览器开发工具的步骤详解
May 12 Javascript
vue项目添加多页面配置的步骤详解
May 22 Javascript
微信小程序判断页面是否从其他页面返回的实例代码
Jul 03 Javascript
在Echarts图中给坐标轴加一个标识线markLine
Jul 20 Javascript
基于JavaScript的数据结构队列动画实现示例解析
Aug 06 Javascript
最全正则表达式总结:验证QQ号、手机号、Email、中文、邮编、身份证、IP地址等
Aug 16 #Javascript
微信小程序多列选择器range-key使用详解
Mar 30 #Javascript
jQuery取得元素标签名称小结(附代码)
Aug 16 #jQuery
微信小程序tabBar底部导航中文注解api详解
Aug 16 #Javascript
AngularJS+Bootstrap3多级导航菜单的实现代码
Aug 16 #Javascript
微信小程序开发animation心跳动画效果
Aug 16 #Javascript
全选复选框JavaScript编写小结(附代码)
Aug 16 #Javascript
You might like
收听短波不可能有声音清晰的品质吗
2021/03/01 无线电
PHP新手上路(五)
2006/10/09 PHP
PHP+MYSQL开发工具及资源收藏
2007/01/02 PHP
PHP 存储文本换行实现方法
2010/01/05 PHP
解析php中两种缩放图片的函数,为图片添加水印
2013/06/14 PHP
php使用array_search函数实现数组查找的方法
2015/06/12 PHP
浅析PHP中的i++与++i的区别及效率
2016/06/15 PHP
php实现微信企业付款到个人零钱功能
2018/10/09 PHP
来自国外的30个基于jquery的Web下拉菜单
2012/06/22 Javascript
js中关于一个分号的崩溃示例
2013/11/11 Javascript
javascript判断office版本示例
2014/04/11 Javascript
javascript自定义的addClass()方法
2014/05/28 Javascript
node.js中的fs.existsSync方法使用说明
2014/12/17 Javascript
ajax在兼容模式下失效的快速解决方法
2016/03/22 Javascript
动态JavaScript所造成一些你不知道的危害
2016/09/25 Javascript
vue.js组件vue-waterfall-easy实现瀑布流效果
2017/08/22 Javascript
将jquery.qqFace.js表情转换成微信的字符码
2017/12/01 jQuery
理解 JavaScript EventEmitter
2018/03/29 Javascript
element-ui带输入建议的input框踩坑(输入建议空白以及会闪出上一次的输入建议问题)
2019/01/15 Javascript
[46:43]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#2LGD VS MVP.Phx第二局
2016/03/02 DOTA
Python yield使用方法示例
2013/12/04 Python
python遍历数组的方法小结
2015/04/30 Python
pymssql数据库操作MSSQL2005实例分析
2015/05/25 Python
Python批量修改文本文件内容的方法
2016/04/29 Python
python实现梯度下降算法
2020/03/24 Python
Python实现平行坐标图的两种方法小结
2019/07/04 Python
Python3 itchat实现微信定时发送群消息的实例代码
2019/07/12 Python
Python实现Selenium自动化Page模式
2019/07/14 Python
简单了解python中的f.b.u.r函数
2019/11/02 Python
英国汽车和货车租赁网站:Hertz英国
2016/09/02 全球购物
欧洲最大的滑雪假期供应商之一:Sunweb Holidays
2018/01/06 全球购物
市场部经理岗位职责
2014/04/10 职场文书
安全责任书范本
2014/04/15 职场文书
小学安全工作汇报材料
2014/08/19 职场文书
幼儿园2016年感恩节活动总结
2016/04/01 职场文书
《和时间赛跑》读后感3篇
2019/12/16 职场文书