微信小程序自定义组件


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 相关文章推荐
ExtJs的Date格式字符代码
Dec 30 Javascript
高效率JavaScript编写技巧整理
Aug 23 Javascript
jQuery避免$符和其他JS库冲突的方法对比
Feb 20 Javascript
js中settimeout方法加参数
Feb 28 Javascript
浅谈javascript 函数属性和方法
Jan 21 Javascript
详解Chai.js断言库API中文文档
Jan 31 Javascript
vue实现打印功能的两种方法
Sep 07 Javascript
vue+iview 实现可编辑表格的示例代码
Oct 31 Javascript
js 计算图片内点个数的示例代码
Apr 04 Javascript
Node4-5静态资源服务器实战以及优化压缩文件实例内容
Aug 29 Javascript
Vue实现圆环进度条的示例
Feb 06 Vue.js
如何使用JavaScript策略模式校验表单
Apr 29 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
一个查看session内容的函数
2006/10/09 PHP
ThinkPHP5&amp;5.1实现验证码的生成、使用及点击刷新功能示例
2020/02/07 PHP
js 屏蔽鼠标右键脚本附破解方法
2009/12/03 Javascript
让div层随鼠标移动的实现代码 ie ff
2009/12/18 Javascript
javascript dom代码应用 简单的相册[firefox only]
2010/06/12 Javascript
分享精心挑选的23款美轮美奂的jQuery 图片特效插件
2012/08/14 Javascript
JS+CSS设置img在DIV中只显示Img垂直居中的部分
2013/10/24 Javascript
AngularJS入门教程(二):AngularJS模板
2014/12/06 Javascript
JS实现超简单的鼠标拖动效果
2015/11/02 Javascript
JavaScript DOM 学习总结(五)
2015/11/24 Javascript
jquery对复选框(checkbox)的操作汇总
2016/01/13 Javascript
jQuery easyUI datagrid 增加求和统计行的实现代码
2016/06/01 Javascript
Javascript对象字面量的理解
2016/06/22 Javascript
微信小程序之页面跳转和参数传递的实现
2017/09/29 Javascript
Vue实现调节窗口大小时触发事件动态调节更新组件尺寸的方法
2018/09/15 Javascript
微信小程序实现无限滚动列表
2020/05/29 Javascript
解决antd 下拉框 input [defaultValue] 的值的问题
2020/10/31 Javascript
[05:06]2017亚洲邀请赛DAC回顾片
2017/04/19 DOTA
[41:41]TFT vs Secret Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
Python去掉字符串中空格的方法
2014/03/11 Python
Python实现子类调用父类的方法
2014/11/10 Python
详解Python的Flask框架中的signals信号机制
2016/06/13 Python
详解Python 爬取13个旅游城市,告诉你五一大家最爱去哪玩?
2019/05/07 Python
Python中单线程、多线程和多进程的效率对比实验实例
2019/05/14 Python
python实现得到当前登录用户信息的方法
2019/06/21 Python
python用for循环求和的方法总结
2019/07/08 Python
Django的Modelforms用法简介
2019/07/27 Python
pycharm解决关闭flask后依旧可以访问服务的问题
2020/04/03 Python
python Django 反向访问器的外键冲突解决
2020/05/20 Python
印尼在线旅游门户网站:NusaTrip
2019/11/01 全球购物
局部内部类是否可以访问非final变量?
2013/04/20 面试题
计算机专业个人求职信范例
2013/09/23 职场文书
安全资金保障制度
2014/01/23 职场文书
护士工作失误检讨书
2014/09/14 职场文书
财会专业大学生求职信
2014/09/26 职场文书
写给医院的感谢信
2015/01/22 职场文书