微信小程序自定义组件


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 相关文章推荐
jquery 插件 任意位置浮动固定层
Dec 25 Javascript
javascript 兼容所有浏览器的DOM扩展功能
Aug 01 Javascript
js 数值转换为3位逗号分隔的示例代码
Feb 19 Javascript
javascript的push使用指南
Dec 05 Javascript
使用AngularJS 应用访问 Android 手机的图片库
Mar 24 Javascript
详解vue slot插槽的使用方法
Jun 13 Javascript
Vue 使用 Mint UI 实现左滑删除效果CellSwipe
Apr 27 Javascript
vue-cli3搭建项目的详细步骤
Dec 05 Javascript
Vue.js + Nuxt.js 项目中使用 Vee-validate 表单校验
Apr 22 Javascript
详解Vue中组件传值的多重实现方式
Aug 16 Javascript
js实现开关灯效果
Mar 30 Javascript
在vue中实现禁止屏幕滚动,禁止屏幕滑动
Jul 22 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
PHP批量上传图片的具体实现方法介绍.
2014/02/26 PHP
PHP安装memcached扩展笔记
2015/05/28 PHP
php检测图片主要颜色的方法
2015/07/01 PHP
PHP中的流(streams)浅析
2015/07/02 PHP
如何在旧的PHP系统中使用PHP 5.3之后的库
2015/12/02 PHP
thinkPHP模型初始化实例分析
2015/12/03 PHP
PHP水印类,支持添加图片、文字、填充颜色区域的实现
2017/02/04 PHP
JavaScript Date对象使用总结
2009/05/14 Javascript
js中关于一个分号的崩溃示例
2013/11/11 Javascript
jQuery控制TR显示隐藏的三种常用方法
2014/08/21 Javascript
JS+CSS实现另类带提示效果的竖向导航菜单
2015/10/15 Javascript
jQuery Chosen通用初始化
2017/03/07 Javascript
将Sublime Text 3 添加到右键中的简单方法
2017/12/12 Javascript
JS验证输入的是否是数字及保留几位小数问题
2018/05/09 Javascript
vue使用Element组件时v-for循环里的表单项验证方法
2018/06/28 Javascript
分享Angular http interceptors 拦截器使用(推荐)
2019/11/10 Javascript
JavaScript实现密码强度实时验证
2020/03/18 Javascript
vue实现打地鼠小游戏
2020/08/21 Javascript
js实现有趣的倒计时效果
2021/01/19 Javascript
Python中矩阵库Numpy基本操作详解
2017/11/21 Python
python爬取指定微信公众号文章
2018/12/20 Python
Pyqt5 基本界面组件之inputDialog的使用
2019/06/25 Python
基于sklearn实现Bagging算法(python)
2019/07/11 Python
Python 中的 import 机制之实现远程导入模块
2019/10/29 Python
Python tkinter模版代码实例
2020/02/05 Python
使用keras实现非线性回归(两种加激活函数的方式)
2020/07/05 Python
opencv 图像礼帽和图像黑帽的实现
2020/07/07 Python
Python读写锁实现实现代码解析
2020/11/28 Python
经典c++面试题四
2015/05/14 面试题
八年级生物教学反思
2014/01/22 职场文书
八一建军节部队活动方案
2014/02/04 职场文书
开业主持词
2014/03/21 职场文书
《大作家的小老师》教学反思
2014/04/16 职场文书
2014年秋季开学寄语
2014/08/02 职场文书
创业计划书之珠宝饰品
2019/08/26 职场文书
Python使用pandas导入csv文件内容的示例代码
2022/12/24 Python