微信小程序自定义组件


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控制TR显示隐藏的几种方法
Jun 18 Javascript
jquery delay()介绍及使用指南
Sep 02 Javascript
用javascript关闭本窗口不弹出询问框的方法
Sep 12 Javascript
javascript面向对象之共享成员属性与方法及prototype关键字用法
Jan 13 Javascript
jQuery实现简洁的轮播图效果实例
Sep 07 Javascript
纯JavaScript 实现flappy bird小游戏实例代码
Sep 27 Javascript
微信小程序 数组中的push与concat的区别
Jan 05 Javascript
jQuery实现html table行Tr的复制、删除、计算功能
Jul 10 jQuery
vee-validate vue 2.0自定义表单验证的实例
Aug 28 Javascript
详解Webpack-dev-server的proxy用法
Sep 08 Javascript
js校验开始时间和结束时间
May 26 Javascript
Javascript中Math.max和Math.max.apply的区别和用法详解
Aug 24 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
基于mysql的论坛(1)
2006/10/09 PHP
php中常用编辑器推荐
2007/01/02 PHP
PHP表单递交控件名称含有点号(.)会被转化为下划线(_)的处理方法
2013/01/06 PHP
php四种基础算法代码实例
2013/10/29 PHP
php获取网页标题和内容函数(不包含html标签)
2014/02/03 PHP
Javascript 跨域访问解决方案
2009/02/14 Javascript
jquery实现点击弹出层效果的简单实例
2014/03/03 Javascript
JavaScript实现鼠标滑过图片变换效果的方法
2015/04/16 Javascript
简介AngularJS的HTML DOM支持情况
2015/06/17 Javascript
基于AngularJS实现页面滚动到底自动加载数据的功能
2015/10/16 Javascript
js表单处理中单选、多选、选择框值的获取及表单的序列化
2016/03/08 Javascript
vue.js学习之递归组件
2016/12/13 Javascript
jquery插件bootstrapValidator表单验证详解
2016/12/15 Javascript
超全面的JavaScript开发规范(推荐)
2017/01/21 Javascript
浅谈Angular4实现热加载开发旅程
2017/09/08 Javascript
微信小程序scroll-x失效的完美解决方法
2018/07/18 Javascript
详解Vue Elementui中的Tag与页面其它元素相互交互的两三事
2018/09/25 Javascript
React事件处理的机制及原理
2018/12/03 Javascript
Vue响应式原理Observer、Dep、Watcher理解
2019/06/06 Javascript
element的el-table中记录滚动条位置的示例代码
2019/11/06 Javascript
微信小程序学习之自定义滚动弹窗
2020/12/20 Javascript
Python转码问题的解决方法
2008/10/07 Python
举例简单讲解Python中的数据存储模块shelve的用法
2016/03/03 Python
python 实现dict转json并保存文件
2019/12/05 Python
详解canvas绘制多张图的排列顺序问题
2019/01/21 HTML / CSS
野兽派官方旗舰店:THE BEAST 野兽派
2016/08/05 全球购物
上班睡觉检讨书
2014/01/09 职场文书
高中体育教学反思
2014/01/29 职场文书
生日宴会主持词
2014/03/20 职场文书
我的梦想演讲稿
2014/04/30 职场文书
股指期货心得体会
2014/09/10 职场文书
2015暑假实习报告范文
2015/07/13 职场文书
五年级作文之劳动作文
2019/11/12 职场文书
《悬崖边的树》读后感2篇
2019/12/02 职场文书
20180830晚上第一届KSL半决赛 雨神vs解冻(二龙 三炮解说)
2022/04/01 星际争霸
win10电脑右下角输入法图标不见了?Win10右下角不显示输入法的解决方法
2022/07/23 数码科技