微信小程序自定义组件


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 easyui 结合jsp简单展现table数据示例
Apr 18 Javascript
jQuery学习笔记之jQuery原型属性和方法
Jun 09 Javascript
详解JavaScript的while循环的使用
Jun 03 Javascript
jQuery基于BootStrap样式实现无限极地区联动
Aug 26 Javascript
jquery获取点击控件的绝对位置简单实例
Oct 13 Javascript
JS实现根据密码长度显示安全条功能
Mar 08 Javascript
Vue Transition实现类原生组件跳转过渡动画的示例
Aug 19 Javascript
jQuery each和js forEach用法比较
Feb 27 jQuery
通过seajs实现JavaScript的模块开发及按模块加载
Jun 06 Javascript
vue开发中遇到的问题总结
Apr 07 Javascript
使用Vue-scroller页面input框不能触发滑动的问题及解决方法
Aug 08 Javascript
低门槛开发iOS、Android、小程序应用的前端框架详解
Oct 16 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/11/21 PHP
Symfony2之session与cookie用法小结
2016/03/18 PHP
Laravel中服务提供者和门面模式的入门介绍
2017/11/06 PHP
PHP堆栈调试操作简单示例
2018/06/15 PHP
jquery动画3.创建一个带遮罩效果的图片走廊
2012/08/24 Javascript
Jquery动态改变图片IMG的src地址示例
2013/06/25 Javascript
jquery图片放大功能简单实现
2013/08/01 Javascript
window.location.href中url中数据量太大时的解决方法
2013/12/23 Javascript
深入解析JavaScript中的arguments对象
2016/06/12 Javascript
分享bootstrap学习笔记心得(组件及其属性)
2017/01/11 Javascript
JavaScript实现简单的星星评分效果
2017/05/18 Javascript
深入理解AngularJs-scope的脏检查(一)
2017/06/19 Javascript
NodeJS实现不可逆加密与密码密文保存的方法
2018/03/16 NodeJs
关于vuejs中v-if和v-show的区别及v-show不起作用问题
2018/03/26 Javascript
基于Vue组件化的日期联动选择器功能的实现代码
2018/11/30 Javascript
angular6根据environments配置文件更改开发所需要的环境的方法
2019/03/06 Javascript
150行代码带你实现微信小程序中的数据侦听
2019/05/17 Javascript
vue请求数据的三种方式
2020/03/04 Javascript
[50:59]2018DOTA2亚洲邀请赛 4.7 总决赛 LGD vs Mineski第四场
2018/04/10 DOTA
Python基于list的append和pop方法实现堆栈与队列功能示例
2017/07/24 Python
python发送邮件脚本
2018/05/22 Python
Python基于Logistic回归建模计算某银行在降低贷款拖欠率的数据示例
2019/01/23 Python
python 使用pygame工具包实现贪吃蛇游戏(多彩版)
2019/10/30 Python
Python关于__name__属性的含义和作用详解
2020/02/19 Python
keras 回调函数Callbacks 断点ModelCheckpoint教程
2020/06/18 Python
python pygame 愤怒的小鸟游戏示例代码
2021/02/25 Python
使用CSS3的::selection改变选中文本颜色的方法
2015/09/29 HTML / CSS
中国酒类在线零售网站:酒仙网
2016/08/20 全球购物
非凡女性奢华谦虚风格:The Modist
2017/10/28 全球购物
石油大学毕业生自荐信
2014/01/28 职场文书
旅游与环境专业求职信
2014/06/05 职场文书
民主生活会剖析材料
2014/09/30 职场文书
2015年个人实习工作总结
2014/12/12 职场文书
2019最新版劳务派遣管理制度
2019/08/16 职场文书
Pytorch实现图像识别之数字识别(附详细注释)
2021/05/11 Python
详解Mysql数据库平滑扩容解决高并发和大数据量问题
2022/05/25 MySQL