微信小程序自定义组件


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渐变发光导航菜单的实例代码
Mar 27 Javascript
jQuery中innerHeight()方法用法实例
Jan 19 Javascript
jQuery提示插件alertify使用指南
Apr 21 Javascript
使用AngularJS创建自定义的过滤器的方法
Jun 18 Javascript
Node.js中路径处理模块path详解
Nov 14 Javascript
javascript实现右下角广告框效果
Feb 01 Javascript
JS实现最简单的冒泡排序算法
Feb 15 Javascript
jQuery Validate表单验证插件实现代码
Jun 08 jQuery
Vue.js实例方法之生命周期详解
Jul 03 Javascript
详解Vue2.0配置mint-ui踩过的那些坑
Apr 23 Javascript
微信小程序使用form表单获取输入框数据的实例代码
May 17 Javascript
JavaScript享元模式原理与用法实例详解
Mar 09 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 变量类型的强制转换
2009/10/23 PHP
php中操作memcached缓存进行增删改查数据的实现代码
2014/08/15 PHP
laravel清除视图缓存的代码
2019/10/23 PHP
js 跨域和ajax 跨域问题小结
2009/07/01 Javascript
jQuery 使用手册(三)
2009/09/23 Javascript
JQuery 绑定事件时传递参数的实现方法
2009/10/13 Javascript
基于jquery的inputlimiter 实现字数限制功能
2010/05/30 Javascript
JS获取url链接字符串 location.href
2013/12/23 Javascript
javascript父、子页面交互技巧总结
2014/08/08 Javascript
Nodejs为什么选择javascript为载体语言
2015/01/13 NodeJs
了解Javascript的模块化开发
2015/03/02 Javascript
js实现搜索框关键字智能匹配代码
2020/03/26 Javascript
jquery拖拽排序简单实现方法(效果增强版)
2016/02/16 Javascript
无法获取隐藏元素宽度和高度的解决方案
2017/03/07 Javascript
js实现3D图片展示效果
2017/03/09 Javascript
javascript 中的try catch应用总结
2017/04/01 Javascript
vue实现样式之间的切换及vue动态样式的实现方法
2017/12/19 Javascript
vue实现类似淘宝商品评价页面星级评价及上传多张图片功能
2018/10/29 Javascript
layui下拉框获取下拉值(select)的例子
2019/09/10 Javascript
Vue项目vscode 安装eslint插件的方法(代码自动修复)
2020/04/15 Javascript
基于JS实现table导出Excel并保留样式
2020/05/19 Javascript
原生js中运算符及流程控制示例详解
2021/01/05 Javascript
Python logging模块学习笔记
2014/05/24 Python
python人人网登录应用实例
2014/09/26 Python
在Python中marshal对象序列化的相关知识
2015/07/01 Python
Python查询IP地址归属完整代码
2017/06/21 Python
详解python项目实战:模拟登陆CSDN
2019/04/04 Python
Python函数中参数是传递值还是引用详解
2019/07/02 Python
python如何建立全零数组
2020/07/19 Python
Html5实现单张、多张图片上传功能
2019/04/28 HTML / CSS
Nordgreen台湾官网:极简北欧设计手表
2019/08/21 全球购物
中科软笔试题和面试题
2014/10/07 面试题
汽车维修专业毕业生的求职信分享
2013/12/04 职场文书
2014年初中班主任工作总结
2014/11/08 职场文书
护士实习自荐信
2015/03/06 职场文书
办公室卫生管理制度
2015/08/04 职场文书