微信小程序自定义组件


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 相关文章推荐
JS提交并解析后台返回的XML的代码
Nov 03 Javascript
解决jquery .ajax 在IE下卡死问题的解决方法
Oct 26 Javascript
javascript的回调函数应用示例
Feb 20 Javascript
ECMAScript6块级作用域及新变量声明(let)
Jun 12 Javascript
Bootstrap中表单控件状态(验证状态)
Aug 04 Javascript
纯JavaScript手写图片轮播代码
Oct 20 Javascript
利用node.js制作命令行工具方法教程(一)
Jun 22 Javascript
JS组件系列之Gojs组件 前端图形化插件之利器
Nov 29 Javascript
详解关于Vue版本不匹配问题(Vue packages version mismatch)
Sep 17 Javascript
react配置antd按需加载的使用
Feb 11 Javascript
highcharts.js数据绑定方式代码实例
Nov 13 Javascript
jQuery开发仿QQ版音乐播放器
Jul 10 jQuery
最全正则表达式总结:验证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
php实现的百度搜索某地天气的小偷代码
2014/04/23 PHP
PHP中ID设置自增后不连续的原因分析及解决办法
2016/08/21 PHP
PHP实现的观察者模式实例
2017/06/21 PHP
在Laravel5中正确设置文件权限的方法
2019/05/22 PHP
php更新cookie内容的详细方法
2019/09/30 PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
2020/04/02 PHP
通过身份证号得到出生日期和性别的js代码
2009/11/23 Javascript
JQUERY获取form表单值的代码
2010/07/17 Javascript
常见JS效果之图片减速度滚动实现代码
2011/12/08 Javascript
Bootstrap模仿起筷首页效果
2016/05/09 Javascript
强大Vue.js组件浅析
2016/09/12 Javascript
[01:21:36]CHAOS vs Alliacne 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
python网络编程之UDP通信实例(含服务器端、客户端、UDP广播例子)
2014/04/25 Python
python和shell实现的校验IP地址合法性脚本分享
2014/10/23 Python
python使用nntp读取新闻组内容的方法
2015/05/08 Python
使用Python3制作TCP端口扫描器
2017/04/17 Python
python使用pil库实现图片合成实例代码
2018/01/20 Python
Python自定义装饰器原理与用法实例分析
2018/07/16 Python
python tkinter窗口最大化的实现
2019/07/15 Python
python实现将列表中各个值快速赋值给多个变量
2020/04/02 Python
利用OpenCV中对图像数据进行64F和8U转换的方式
2020/06/03 Python
Python 为什么推荐蛇形命名法原因浅析
2020/06/18 Python
PyCharm安装PyQt5及其工具(Qt Designer、PyUIC、PyRcc)的步骤详解
2020/11/02 Python
Urban Outfitters美国官网:美国生活方式品牌
2016/08/26 全球购物
100%有机精油,美容油:House of Pure Essence
2018/10/30 全球购物
软件测试有哪些?什么是配置项?
2012/02/12 面试题
翻译学院毕业生自荐书
2014/02/02 职场文书
教学个人的自我评价分享
2014/02/16 职场文书
店铺转让协议书(2014版)
2014/09/23 职场文书
资产运营委托书范本
2014/10/16 职场文书
投标承诺函范文
2015/01/21 职场文书
2015年度村委会工作总结
2015/04/29 职场文书
民事起诉书范本
2015/05/19 职场文书
python实现图片批量压缩
2021/04/24 Python
python 利用PyAutoGUI快速构建自动化操作脚本
2021/05/31 Python
十大公认最好看的动漫:《咒术回战》在榜,《钢之炼金术师》第一
2022/03/18 日漫