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


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实现你值得拥有
Sep 22 Javascript
javascript四舍五入函数代码分享(保留后几位)
Dec 10 Javascript
jquery移除、绑定、触发元素事件使用示例详解
Apr 10 Javascript
让angularjs支持浏览器自动填表
Nov 10 Javascript
深入分析原生JavaScript事件
Dec 29 Javascript
Vue.js系列之项目搭建(1)
Jan 03 Javascript
基于jQuery实现火焰灯效果导航菜单
Jan 04 Javascript
微信小程序 css使用技巧总结
Jan 09 Javascript
Angularjs中的$apply及优化使用详解
Jul 02 Javascript
JS使用遮罩实现点击某区域以外时弹窗的弹出与关闭功能示例
Jul 31 Javascript
js防抖和节流的深入讲解
Dec 06 Javascript
vue keep-alive的简单总结
Jan 25 Vue.js
从零开始封装自己的自定义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把session写入数据库示例
2014/02/26 PHP
脚本吧 - 幻宇工作室用到js,超强推荐expand.js
2006/12/23 Javascript
IE浏览器兼容Firefox的JS脚本的代码
2008/10/23 Javascript
jQuery maxlength文本字数限制插件
2010/04/16 Javascript
JavaScript入门之基本函数详解
2011/10/21 Javascript
Javascript中的String对象详谈
2014/03/03 Javascript
jQuery实现鼠标悬停显示提示信息窗口的方法
2015/04/30 Javascript
AngularJS学习第二篇 AngularJS依赖注入
2017/02/13 Javascript
node.js入门教程之querystring模块的使用方法
2017/02/27 Javascript
老生常谈jquery中detach()和remove()的区别
2017/03/02 Javascript
简单实现js菜单栏切换效果
2017/03/04 Javascript
基于vue监听滚动事件实现锚点链接平滑滚动的方法
2018/01/17 Javascript
用jquery获取select标签中选中的option值及文本的示例
2018/01/25 jQuery
Vue.js 事件修饰符的使用教程
2018/11/01 Javascript
Layui 动态禁止select下拉的例子
2019/09/03 Javascript
JavaScript中的null和undefined用法解析
2019/09/30 Javascript
html5以及jQuery实现本地图片上传前的预览代码实例讲解
2021/03/01 jQuery
[50:27]Secret vs VG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python实现TCP服务器端与客户端的方法详解
2015/04/30 Python
python中zip和unzip数据的方法
2015/05/27 Python
Python实现判断给定列表是否有重复元素的方法
2018/04/11 Python
Python简单获取二维数组行列数的方法示例
2018/12/21 Python
PyQt5 QTableView设置某一列不可编辑的方法
2019/06/25 Python
Django中使用极验Geetest滑动验证码过程解析
2019/07/31 Python
python shutil文件操作工具使用实例分析
2019/12/25 Python
欧洲领先的电子和电信零售商和服务提供商:Currys PC World Business
2017/12/05 全球购物
Java面试题:说出如下代码的执行结果
2015/10/30 面试题
建筑装饰学院室内设计专业个人自我评价
2013/12/07 职场文书
热爱祖国的演讲稿
2014/05/04 职场文书
学校就业推荐信范文
2014/05/19 职场文书
作风建设年活动总结
2014/08/27 职场文书
公司经营目标责任书
2015/01/29 职场文书
初中班级口号霸气押韵
2015/12/24 职场文书
小公司融资,商业计划书的8切记
2019/07/15 职场文书
七年级作文之雪景
2019/11/18 职场文书
超详细教你怎么升级Mysql的版本
2021/05/19 MySQL