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


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 相关文章推荐
Node.js中使用计时器定时执行函数详解
Aug 15 Javascript
javascript简易画板开发
Apr 12 Javascript
基于jQuery实现弹幕APP
Feb 10 Javascript
jQuery中的deferred使用方法
Mar 27 jQuery
Javascript实现一个简单的输入关键字添加标签效果实例
Jun 01 Javascript
echarts学习笔记之箱线图的分析与绘制详解
Nov 22 Javascript
js阻止默认右键的下拉菜单方法
Jan 02 Javascript
老生常谈JS中的继承及实现代码
Jul 06 Javascript
怎样在vue项目下添加ESLint的方法
May 16 Javascript
layui 上传图片 返回图片地址的方法
Sep 26 Javascript
使用vue实现一个电子签名组件的示例代码
Jan 06 Javascript
javascript实现左右缓动动画函数
Nov 25 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
2021年最新CPU天梯图
2021/03/04 数码科技
PHP实现对站点内容外部链接的过滤方法
2014/09/10 PHP
thinkphp数据查询和遍历数组实例
2014/11/28 PHP
php常用图片处理类
2016/03/16 PHP
jquery 分页控件实现代码
2009/11/30 Javascript
javascript 自动填写表单的实现方法
2010/04/09 Javascript
JS函数实现动态添加CSS样式表文件
2012/12/15 Javascript
为jquery的ajaxfileupload增加附加参数的方法
2014/03/04 Javascript
jquery实现带二级菜单的导航示例
2014/04/28 Javascript
HTML5+jQuery插件Quicksand实现超酷的星际争霸2兵种分类展示效果(附demo源码下载)
2016/05/25 Javascript
【经典源码收藏】基于jQuery的项目常见函数封装集合
2016/06/07 Javascript
JavaScript实现页面无操作倒计时退出
2016/10/22 Javascript
Vue方法与事件处理器详解
2016/12/01 Javascript
jQuery取得元素标签名称小结(附代码)
2017/08/16 jQuery
Bootstrap框架建立树形菜单(Tree)的实例代码
2017/10/30 Javascript
jQuery实现侧边栏隐藏与显示的方法详解
2018/12/22 jQuery
对layui初始化列表的CheckBox属性详解
2019/09/13 Javascript
Python实现的Kmeans++算法实例
2014/04/26 Python
利用Python抓取行政区划码的方法
2016/11/28 Python
基于Python闭包及其作用域详解
2017/08/28 Python
python中kmeans聚类实现代码
2018/02/23 Python
浅谈python3.x pool.map()方法的实质
2019/01/16 Python
PYQT5开启多个线程和窗口,多线程与多窗口的交互实例
2019/12/13 Python
Python+unittest+DDT实现数据驱动测试
2020/11/30 Python
python进行二次方程式计算的实例讲解
2020/12/06 Python
详解python中的三种命令行模块(sys.argv,argparse,click)
2020/12/15 Python
Omio法国:全欧洲低价大巴、火车和航班搜索和比价
2017/11/13 全球购物
顶丰TOPPIK台湾官网:增发纤维假发,告别秃发困扰
2018/06/13 全球购物
西班牙美妆电商:Perfume’s Club(有中文站)
2018/08/08 全球购物
澳大利亚网上买书:Angus & Robertson
2019/07/21 全球购物
关键字throw与throws的用法差异
2016/11/22 面试题
高二英语教学反思
2014/01/19 职场文书
什么样的创业计划书可行性高?
2014/02/01 职场文书
房屋转让协议书范本
2014/04/11 职场文书
教师拔河比赛广播稿
2014/10/14 职场文书
Python学习之迭代器详解
2022/04/01 Python