微信小程序之自定义组件的实现代码(附源码)


Posted in Javascript onAugust 02, 2018

最近在项目开发中,遇到好多雷同的页面样式,就想着可以将常用的功能模块封装成组件,方便在项目中使用和修改,下面就参照微信小程序的文档分步骤写一个微信小程序的组件。

附上效果图:

微信小程序之自定义组件的实现代码(附源码)

step1:创建文件并申明

与创建微信小程序的页面一样,一个自定义组件也需要json,wxml,wxss,js四个文件。

在项目根目录中创建文件夹,取名为:component,在该目录下继续创建文件夹successModal。

可以在开发工具中右键创建,选择component,默认自动会创建四个文件。如图:

微信小程序之自定义组件的实现代码(附源码)

在successModal.json文件中进行自定义组件声明,如:

在开发工具中右键新建选择component,默认自动会创建。

{
 "component": true,
 "usingComponents": {}
}

step2:编写组件模板代码

<!-- 这是自定义组件的内部WXML结构 success.wxml-->
<view class='modal-section' wx:if="{{modalHidden}}">
 <view class='modal-opaci' bindtap='modal_click_Hidden'></view>
 <view class='modal-cont'>
 <icon type='{{modalIcon}}' size='70'></icon>
 <text class='modal-titleTxt {{modalIcon}}'>{{modalTitle}}</text>
 <text class='success-msg'>{{modalDesc}}</text>
 </view>
</view>

step3:编写样式文件

/* 这里的样式只应用于这个自定义组件 */
/*successModal.wxss*/
.modal-opaci {
 position: absolute;
 left: 0;
 top: 0;
 z-index: 100;
 height: 100%;
 width: 100%;
 background: black;
 opacity: 0.4;
 filter: alpha(opacity=40);
}
.modal-cont {
 position: fixed;
 top: 30%;
 left: 8.5%;
 z-index: 999;
 border-radius: 20rpx;
 padding: 40rpx 150rpx;
 background-color: #fff;
 text-align: center;
}
.modal-cont text {
 line-height: 90rpx;
 display: block;
}
.success {
 color: #09bb07;
}
.modal-titleTxt {
 font-size: 50rpx;
 font-weight: 700;
}
.warn {
 color: #f76260;
}

step4:编写业务逻辑

在自定义组件的 js 文件中,需要使用 Component() 来注册组件,组件的属性值和内部数据将被用于组件 wxml 的渲染,其中,属性值是可由组件外部传入的。

//successModal.js
Component({
 /**
 * 组件的属性列表
 */
 properties: {
 //这里定义了modalHidden属性,属性值可以在组件使用时指定.写法为modal-hidden 
 modalHidden: {
  type: Boolean,
  value: true
 },
 modalIcon: {
  type: String,
  value: ' ',
 },
 modalTitle: {
  type: String,
  value: ' ',
 },
 modalDesc: {
  type: String,
  value: ' ',
 }
 },

 /**
 * 组件的初始数据
 */
 data: {

 },

 /**
 * 组件的方法列表
 */
 methods: {
 // 这里是自定义方法
 modal_click_Hidden: function () {
  this.setData({
  modalHidden: false,
  })
 },
 }
})

step5:使用自定义组件

首先在需要使用的json文件中进行引用申明,然后需要提供每个自定义组件的标签名和对应的自定义组件文件路径。

//index.json
{
 "usingComponents": {
 "modal-success": "../../component/successModal/successModal" //在这里写上页面中自定义的标签名和自定义组件的文件路径
 },
 "navigationBarTitleText": "首页"
}

其次,在页面的wxml中使用自定义组件:在页面的 wxml 中就可以像使用基础组件一样使用自定义组件。节点名即自定义组件的标签名,节点属性即传递给组件的属性值。

<!--index.wxml-->
<view class="container">
 <view class="demoBtn" bindtap="bindViewTap">
 <text>点击</text>
 </view>
 <!-- 调用modal组件 -->
 <modal-success modal-hidden="{{is_modal_Hidden}}" modal-icon="{{is_modal_icon}}" modal-title="{{is_modal_title}}" modal-desc="{{is_modal_desc}}" />
</view>

以上就是小程序自定义组件的demo,欢迎start。

github地址:https://github.com/ywyan/wx-component

注意点:

  • 对于基础库的1.5.x版本, 1.5.7 也有部分自定义组件支持。
  • 因为WXML节点标签名只能是小写字母、中划线和下划线的组合,所以自定义组件的标签名也只能包含这些字符。
  • 自定义组件也是可以引用自定义组件的,引用方法类似于页面引用自定义组件的方式(使用 usingComponents 字段)。
  • 自定义组件和使用自定义组件的页面所在项目根目录名不能以“wx-”为前缀,否则会报错。
  • 旧版本的基础库不支持自定义组件,此时,引用自定义组件的节点会变为默认的空节点。

总结

以上所述是小编给大家介绍的微信小程序之自定义组件的实现代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
Javascript学习笔记4 Eval函数
Jan 11 Javascript
jquery 图片轮换效果
Jul 29 Javascript
jQuery如何将选中的对象转化为原始的DOM对象
Jun 09 Javascript
Bootstrap自定义文件上传下载样式
May 26 Javascript
JS实现对中文字符串进行utf-8的Base64编码的方法(使其与Java编码相同)
Jun 21 Javascript
DropDownList控件绑定数据源的三种方法
Dec 24 Javascript
JS常见创建类的方法小结【工厂方式,构造器方式,原型方式,联合方式等】
Apr 01 Javascript
浅谈Vue.js应用的四种AJAX请求数据模式
Aug 30 Javascript
vue2.0自定义指令示例代码详解
Apr 25 Javascript
websocket4.0+typescript 实现热更新的方法
Aug 14 Javascript
jQuery模仿ToDoList实现简单的待办事项列表
Dec 30 jQuery
Node.js API详解之 dns模块用法实例分析
May 15 Javascript
Array数组对象中的forEach、map、filter及reduce详析
Aug 02 #Javascript
利用Blob进行文件上传的完整步骤
Aug 02 #Javascript
vue.js图片转Base64上传图片并预览的实现方法
Aug 02 #Javascript
vue组件横向树实现代码
Aug 02 #Javascript
利用Node.js批量抓取高清妹子图片实例教程
Aug 02 #Javascript
在微信小程序里使用watch和computed的方法
Aug 02 #Javascript
在小程序中使用Echart图表的示例代码
Aug 02 #Javascript
You might like
深入php多态的实现详解
2013/06/09 PHP
php.ini修改php上传文件大小限制的方法详解
2013/06/17 PHP
php中钩子(hook)的原理与简单应用demo示例
2019/09/03 PHP
统一接口:为FireFox添加IE的方法和属性的js代码
2007/03/25 Javascript
利用jQuery操作对象数组的实现代码
2011/04/27 Javascript
jQuery图片播放8款精美插件分享
2013/02/17 Javascript
javascript实现无限级select联动菜单
2015/01/02 Javascript
调试JavaScript中正则表达式中遇到的问题
2015/01/27 Javascript
如何解决easyui自定义标签 datagrid edit combobox 手动输入保存不上
2015/12/26 Javascript
深入解析JavaScript中的立即执行函数
2016/05/21 Javascript
plupload+artdialog实现多平台上传文件
2016/07/19 Javascript
最常用的jQuery表单验证(简单)
2017/05/23 jQuery
关于Mac下安装nodejs、npm和cnpm的教程
2018/04/11 NodeJs
Vue批量图片显示时遇到的路径被解析问题
2019/03/28 Javascript
微信小程序判断页面是否从其他页面返回的实例代码
2019/07/03 Javascript
vue实现树形结构样式和功能的实例代码
2019/10/15 Javascript
[02:28]DOTA2亚洲邀请赛附加赛 RECAP赛事回顾
2015/01/29 DOTA
闭包在python中的应用之translate和maketrans用法详解
2014/08/27 Python
python判断字符串是否包含子字符串的方法
2015/03/24 Python
python实现清屏的方法
2015/04/30 Python
python清除字符串里非数字字符的方法
2015/07/02 Python
python实现按任意键继续执行程序
2016/12/30 Python
python生成excel的实例代码
2017/11/08 Python
通过Py2exe将自己的python程序打包成.exe/.app的方法
2018/05/26 Python
python print出共轭复数的方法详解
2019/06/25 Python
使用pip安装python库的多种方式
2019/07/31 Python
python将dict中的unicode打印成中文实例
2020/05/11 Python
解决Django Haystack全文检索为空的问题
2020/05/19 Python
关于tf.matmul() 和tf.multiply() 的区别说明
2020/06/18 Python
一款利用纯css3实现的超炫3D表单的实例教程
2014/12/01 HTML / CSS
如何用H5实现一个触屏版的轮播器的实例
2017/01/09 HTML / CSS
莱德杯高尔夫欧洲官方商店:Ryder Cup Shop
2019/08/14 全球购物
应届生程序员求职信
2013/11/05 职场文书
生物科学专业个人求职信范文
2013/12/07 职场文书
nginx网站服务如何配置防盗链(推荐)
2021/03/31 Servers
教你如何使用Python实现二叉树结构及三种遍历
2021/06/18 Python