微信小程序自定义组件的实现方法及自定义组件与页面间的数据传递问题


Posted in Javascript onOctober 09, 2018

首先我们在pages文件夹下创建components目录用于存放自定义组件。如图所示,以我创建的dialog组件为例,自定义组件的格式与页面一样,分为4个文件。

  微信小程序自定义组件的实现方法及自定义组件与页面间的数据传递问题 

图1                      

微信小程序自定义组件的实现方法及自定义组件与页面间的数据传递问题

  图2

如上图2所示,假如index页面有一个按钮触发点击事件后弹出dialog,并且当点击某个部门时,将dialog关闭,并将部门名称与红色标题同步。

一、首先把dialog组件的样式写好,并在index页面相应的位置引用。以下就是代码啦(分别为:wxml、wxss、js、json)

<view class='wx_dialog_container' hidden="{{!isShow}}">
 <view class='wx-mask' bindtap='close'></view>
 <view class='wx-dialog'>
 <text class='li' bindtap='groupClick' wx:for="{{items}}" data-index='{{index}}' wx:for-item="item">{{item.department}}</text> 
 </view>
 </view>

.wx_dialog_container{
 width: 100%;
 height: 100%;
 z-index: 999;
}
.wx-mask{
 position: fixed;
 z-index: 1000;
 top: 0;
 right: 0;
 left: 35%;
 bottom: 0;
 background: rgba(0, 0, 0, 0.3);
}
.wx-dialog{
 position: fixed;
 min-width: 528rpx;
 height: 100%;
 left: 0;
 top:314px;
 -webkit-transform: translate(-50%, -50%);
 transform: translate(-50%, -50%);
 background-color: #FFFFFF;
 text-align:left;
}
.wx-dialog .li{
 display: block;
 font-size: 18px;
 margin-top:28px;
 margin-left:154px;
}

Component({
 properties: {
 
 },
 data: {
 isShow: false,
 animationData: {},
 color:"#000",
 items:[
 { department: '研发部'},
 { department: '设计部' },
 { department: '人事部'},
 { department: '销售部' },
 { department: '市场运营部' },
 ]
 },

 methods: {
 show: function () {
 this.setData({
 isShow: true
 });
 },
 
 close: function () {
 this.setData({
 isShow: false
 })
 },

 // 自定义组件与页面之间的数据通信
 groupClick: function (e){
 var group = this.data.items[e.target.dataset.index]
 console.log(group)
 // 使用 triggerEvent 方法触发自定义组件事件,指定事件名、detail对象和事件选项
 this.triggerEvent('okEvent', { group}, {})
 
 
 this.setData({
 isShow: false

 })
 },
 
 },
})

{
 "component": true
}

最后一步别忘了在你相应的页面中引用它,注意:自定义组件名称要和components目录下的一致。如下图我在index.wxml中使用它

微信小程序自定义组件的实现方法及自定义组件与页面间的数据传递问题

二、组件与页面怎么数据通信呢?

•首先要知道你点击的是列表中的哪个部门,所有要为列表元素添加一个 groupClick事件 打印出事件对象 e ,我们发现我们要的数据在e.target.dataset.index里
•已经得到数据对象了,下一步就是想办法把它传递给 index页面更新数据。在当前页面想要获取组件中的某一状态,需要使用到this.triggerEvent(' ',{},{}),第一个参数是自定义事件名称,所以还要在组件身上绑定个自定义事件,第二个对象就是你要传递的数据,第三个一般不用(代码参见标黄部分)
•最后就是在页面的index.js中定义这个事件来接收dialog的数据,并打印出 e 找到数据更新数据。(如下代码) 

// 接受triggerEvent 方法触发的自定义组件事件来更新同步数据
 okEvent: function (e) {
 console.log(e)
 this.setData({
 groupName: e.detail.group.department
 })
 
 },

三、最后一个小知识

如果想在 index.js逻辑中引用dialog.js 中methods里定义好的方法,需要在index.js 中添加如下代码

onReady: function () {
 this.dialog = this.selectComponent('#dialog');
 },

比如:我把show、close 方法定义在了组件中的methods 里,要在index页面中触发某个时间让dialog展示,只需在index.js 中这么写即可。

微信小程序自定义组件的实现方法及自定义组件与页面间的数据传递问题

总结

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

Javascript 相关文章推荐
filters.revealTrans.Transition使用方法小结
Aug 19 Javascript
Javascript表达式中连续的 &amp;&amp; 和 || 之赋值区别
Oct 17 Javascript
基于jQuery选择器的整理集合
Apr 26 Javascript
jQuery制作简洁的图片轮播效果
Apr 03 Javascript
jquery UI Datepicker时间控件的使用方法(加强版)
Nov 07 Javascript
js+css3制作时钟特效
Oct 16 Javascript
jquery网页日历显示控件calendar3.1使用详解
Nov 24 Javascript
基于cookie实现zTree树刷新后展开状态不变
Feb 28 Javascript
浅谈js for循环输出i为同一值的问题
Mar 01 Javascript
解决Layui数据表格中checkbox位置不居中的方法
Aug 15 Javascript
vue项目动态设置页面title及是否缓存页面的问题
Nov 08 Javascript
微信小程序文章详情页跳转案例详解
Jul 09 Javascript
从零开始封装自己的自定义Vue组件
Oct 09 #Javascript
vue axios 简单封装以及思考
Oct 09 #Javascript
angularJS实现不同视图同步刷新详解
Oct 09 #Javascript
对angular 实时更新模板视图的方法$apply详解
Oct 09 #Javascript
AngularJs返回前一页面时刷新一次前面页面的方法
Oct 09 #Javascript
详解js模板引擎art template数组渲染的方法
Oct 09 #Javascript
angular4强制刷新视图的方法
Oct 09 #Javascript
You might like
php include,include_once,require,require_once
2008/09/05 PHP
浅析PHP编程中10个最常见的错误
2014/08/08 PHP
PHP实现WebService的简单示例和实现步骤
2015/03/27 PHP
PHP xpath提取网页数据内容代码解析
2020/07/16 PHP
CSS常用网站布局实例
2008/04/03 Javascript
Javascript select下拉框操作常用方法
2009/11/09 Javascript
CSS和Javascript简单复习资料
2010/06/29 Javascript
JQEasy-ui在IE9以下版本中二次加载的问题分析及处理方法
2014/06/23 Javascript
jQuery实现Tab选项卡切换效果简单演示
2015/11/23 Javascript
angularjs实现上拉加载和下拉刷新数据功能
2017/06/12 Javascript
Node.js调用fs.renameSync报错(Error: EXDEV, cross-device link not permitted)
2017/12/27 Javascript
vue cli 全面解析
2018/02/28 Javascript
js实现敏感词过滤算法及实现逻辑
2018/07/24 Javascript
记React connect的几种写法(小结)
2018/09/18 Javascript
vue中轮训器的使用
2019/01/27 Javascript
vue路由中前进后退的一些事儿
2019/05/18 Javascript
JavaScript前端页面搜索功能案例【基于jQuery】
2019/07/10 jQuery
vue实现下拉加载其实没那么复杂
2019/08/13 Javascript
[02:31]2014DOTA2国际邀请赛2009专访:干爹表现出乎意料 看好DK杀回决赛
2014/07/20 DOTA
[01:19]DOTA2城市挑战赛报名开始 开启你的城市传奇
2018/03/23 DOTA
Python中的urllib模块使用详解
2015/07/07 Python
python3实现ftp服务功能(服务端 For Linux)
2017/03/24 Python
python 寻找优化使成本函数最小的最优解的方法
2017/12/28 Python
Python压缩模块zipfile实现原理及用法解析
2020/08/14 Python
详解matplotlib中pyplot和面向对象两种绘图模式之间的关系
2021/01/22 Python
css3实现简单的白云飘动背景特效
2020/10/28 HTML / CSS
Html5实现单张、多张图片上传功能
2019/04/28 HTML / CSS
蔻驰西班牙官网:COACH西班牙
2019/01/16 全球购物
乌克兰第一的珠宝网上商店:Gold.ua
2019/11/29 全球购物
2019年Java面试必问之经典试题
2012/09/12 面试题
优秀求职信范文分享
2014/01/26 职场文书
《这儿真好》教学反思
2014/02/22 职场文书
服装采购员岗位职责
2014/03/15 职场文书
求职信结尾怎么写
2014/05/26 职场文书
2016小学优秀教师先进事迹材料
2016/02/26 职场文书
基于Python实现的购物商城管理系统
2021/04/27 Python