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


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 相关文章推荐
jquery插件jbox使用iframe关闭问题
Feb 09 Javascript
模仿jQuery each函数的链式调用
Jul 22 Javascript
jQuery往textarea中光标所在位置插入文本的方法
Jun 26 Javascript
js canvas实现擦除动画
Jul 16 Javascript
js获取元素下的第一级子元素的方法(推荐)
Mar 05 Javascript
Bootstrap 网格系统布局详解
Mar 19 Javascript
使用Xcache缓存器加速PHP网站的配置方法
Apr 22 Javascript
js定时器实现倒计时效果
Nov 05 Javascript
layui 优化button按钮和弹出框的方法
Aug 15 Javascript
react项目如何使用iconfont的方法步骤
Mar 13 Javascript
vue+element-ui表格封装tag标签使用插槽
Jun 18 Javascript
Javascript基于OOP实实现探测器功能代码实例
Aug 26 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
Windows2003 下 MySQL 数据库每天自动备份
2006/12/21 PHP
深入理解PHP原理之错误抑制与内嵌HTML分析
2011/05/02 PHP
php代码书写习惯优化小结
2013/06/20 PHP
php中使用getimagesize获取图片、flash等文件的尺寸信息实例
2014/04/29 PHP
Smarty高级应用之缓存操作技巧分析
2016/05/14 PHP
PHP常用函数总结(180多个)
2016/12/25 PHP
实例讲解PHP表单
2020/06/10 PHP
IE8 引入跨站数据获取功能说明
2008/07/22 Javascript
jquery ui 1.7 ui.tabs 动态添加与关闭(按钮关闭+双击关闭)
2010/04/01 Javascript
ExtJS中文乱码之GBK格式编码解决方案及代码
2013/01/20 Javascript
从JQuery源码分析JavaScript函数的apply方法与call方法
2014/09/25 Javascript
使用vue的v-for生成table并给table加上序号的实例代码
2017/10/27 Javascript
完美解决mui框架off-canvas侧滑超出部分隐藏无法滚动的问题
2018/01/25 Javascript
vue使用iframe嵌入网页的示例代码
2020/06/09 Javascript
vue小白入门教程
2018/04/02 Javascript
Node.js引入UIBootstrap的方法示例
2018/05/11 Javascript
vue中使用props传值的方法
2019/05/08 Javascript
jquery+ajax实现上传图片并显示上传进度功能【附php后台接收】
2019/06/06 jQuery
Angular8引入百度Echarts进行图表分析的实现代码
2019/11/27 Javascript
javascript中可能用得到的全部的排序算法
2020/03/05 Javascript
[01:13:18]Secret vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
Python设计模式之代理模式实例
2014/04/26 Python
python模块简介之有序字典(OrderedDict)
2016/12/01 Python
Face++ API实现手势识别系统设计
2018/11/21 Python
详解Python 字符串相似性的几种度量方法
2019/08/29 Python
python从zip中删除指定后缀文件(推荐)
2019/12/05 Python
Django 项目通过加载不同env文件来区分不同环境
2020/02/17 Python
python在CMD界面读取excel所有数据的示例
2020/09/28 Python
Selenium+BeautifulSoup+json获取Script标签内的json数据
2020/12/07 Python
南非最大的在线时尚商店:Zando
2019/07/21 全球购物
写好求职应聘自荐信的三部曲
2013/09/21 职场文书
生产副总岗位职责
2013/11/28 职场文书
法人代表证明书
2014/09/18 职场文书
校园安全教育心得体会
2016/01/15 职场文书
Python实现Excel文件的合并(以新冠疫情数据为例)
2022/03/20 Python
golang连接MySQl使用sqlx库
2022/04/14 Golang