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


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 相关文章推荐
js获取url参数的使用扩展实例
Dec 29 Javascript
jquery计算鼠标和指定元素之间距离的方法
Jun 26 Javascript
JS实现的表格行上下移动操作示例
Aug 03 Javascript
js设置和获取自定义属性的方法
Oct 20 Javascript
使用vue.js实现联动效果的示例代码
Jan 10 Javascript
xmlplus组件设计系列之图标(ICON)(1)
May 05 Javascript
基于es6三点运算符的使用方法(实例讲解)
Oct 12 Javascript
详解Vue中localstorage和sessionstorage的使用
Dec 22 Javascript
apicloud拉起小程序并传递参数的方法示例
Nov 21 Javascript
JavaScript使用小插件实现倒计时的方法讲解
Mar 11 Javascript
vue点击按钮实现简单页面的切换
Sep 08 Javascript
vue实现一个矩形标记区域(rectangle marker)的方法
Oct 28 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 反射机制实现动态代理的代码
2008/10/22 PHP
php cookies中删除的一般赋值方法
2011/05/07 PHP
PHP验证信用卡卡号是否正确函数
2015/05/27 PHP
PHP模拟post提交数据方法汇总
2016/02/16 PHP
PHP+JQUERY操作JSON实例
2017/03/23 PHP
ThinkPHP框架表单验证操作方法
2017/07/19 PHP
PHP聚合式迭代器接口IteratorAggregate用法分析
2017/12/28 PHP
PHP面向对象程序设计内置标准类,普通数据类型转为对象类型示例
2019/06/12 PHP
Yii redis集合的基本使用教程
2020/06/14 PHP
Javascript 面向对象特性
2009/12/28 Javascript
使用jquery mobile做幻灯播放效果实现步骤
2013/01/04 Javascript
JavaScript定时显示广告代码分享
2015/03/02 Javascript
一步步教大家编写酷炫的导航栏js+css实现
2016/03/14 Javascript
JS简单实现移动端日历功能示例
2016/12/28 Javascript
jQuery插件FusionCharts实现的2D面积图效果示例【附demo源码下载】
2017/03/06 Javascript
nodejs爬虫初试superagent和cheerio
2018/03/05 NodeJs
使用live-server快速搭建本地服务器+自动刷新的方法
2018/03/09 Javascript
详解使用jQuery.i18n.properties实现js国际化
2018/05/04 jQuery
利用JavaScript将Excel转换为JSON示例代码
2019/06/14 Javascript
详解mpvue实现对苹果X安全区域的适配
2019/07/31 Javascript
[01:01:52]DOTA2-DPC中国联赛正赛 iG vs LBZS BO3 第一场 3月4日
2021/03/11 DOTA
python 遍历字符串(含汉字)实例详解
2017/04/04 Python
python Matplotlib底图中鼠标滑过显示隐藏内容的实例代码
2019/07/31 Python
python使用Geany编辑器配置方法
2020/02/21 Python
pycharm下配置pyqt5的教程(anaconda虚拟环境下+tensorflow)
2020/03/25 Python
Python安装第三方库攻略(pip和Anaconda)
2020/10/15 Python
HTML5开发动态音频图的实现
2020/07/02 HTML / CSS
院药学专业个人求职信
2013/09/21 职场文书
应届大学生简历中的自我评价
2014/01/15 职场文书
自动一体化专业求职信
2014/03/15 职场文书
教师求职自荐信
2015/03/26 职场文书
退休欢送会主持词
2015/07/01 职场文书
学前班教学反思
2016/02/24 职场文书
html5表单的required属性使用
2021/07/07 HTML / CSS
最新最全的手机号验证正则表达式
2022/02/24 Javascript
引用计数法和root搜索算法以及JVM中判定对象需要回收的方法
2022/04/19 Java/Android