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


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 页面输出值
Nov 30 Javascript
漂亮的jquery提示效果(仿腾讯弹出层)
Feb 05 Javascript
js调用webservice中的方法实现思路及代码
Feb 25 Javascript
javascript使用正则表达式检测IP地址
Dec 03 Javascript
jQuery满屏焦点图左右滚动特效代码分享
Sep 07 Javascript
每天一篇javascript学习小结(String对象)
Nov 18 Javascript
不定义JQuery插件 不要说会JQuery
Mar 07 Javascript
在vue项目中使用Nprogress.js进度条的方法
Jan 31 Javascript
Vue动态获取width的方法
Aug 22 Javascript
vue实例中data使用return包裹的方法
Aug 27 Javascript
React Hooks 实现和由来以及解决的问题详解
Jan 17 Javascript
Element图表初始大小及窗口自适应实现
Jul 10 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中simplexml_load_string使用实例分享
2014/02/13 PHP
php获取一个变量的名字的方法
2014/09/05 PHP
PHP中绘制图像的一些函数总结
2014/11/19 PHP
php生成图片验证码
2015/06/09 PHP
php结合ACCESS的跨库查询功能
2015/06/12 PHP
简单谈谈php延迟静态绑定
2016/01/26 PHP
Laravel框架实现即点即改功能的方法分析
2019/10/31 PHP
PHP反射基础知识回顾
2020/09/10 PHP
javascript 网页跳转的方法
2008/12/24 Javascript
动态加载外部javascript文件的函数代码分享
2011/07/28 Javascript
jquery实现点击页面计算点击次数
2015/01/23 Javascript
JS+CSS实现大气的黑色首页导航菜单效果代码
2015/09/10 Javascript
Vue 项目分环境打包的方法示例
2018/08/03 Javascript
JSON.stringify()方法讲解
2019/01/31 Javascript
微信小程序学习笔记之目录结构、基本配置图文详解
2019/03/28 Javascript
解决layui轮播图有数据不显示的情况
2019/09/16 Javascript
python处理按钮消息的实例详解
2017/07/11 Python
Django中ORM表的创建和增删改查方法示例
2017/11/15 Python
tensorflow建立一个简单的神经网络的方法
2018/02/10 Python
python pandas中DataFrame类型数据操作函数的方法
2018/04/08 Python
pip安装时ReadTimeoutError的解决方法
2018/06/12 Python
对python 通过ssh访问数据库的实例详解
2019/02/19 Python
python 批量修改 labelImg 生成的xml文件的方法
2019/09/09 Python
python 使用xlsxwriter循环向excel中插入数据和图片的操作
2021/01/01 Python
HTML5手机端弹出遮罩菜单特效代码
2016/01/27 HTML / CSS
日本土著品牌,综合型购物网站:Cecile
2016/08/23 全球购物
英国家庭和商业健身器材购物网站:Fitness Options
2018/07/05 全球购物
同步和异步有何异同,在什么情况下分别使用他们?
2012/12/28 面试题
学雷锋活动总结范文
2014/04/25 职场文书
校园主题婚礼活动策划方案
2014/09/15 职场文书
2014年教育工作总结
2014/11/26 职场文书
机器人总动员观后感
2015/06/09 职场文书
八年级英语教学反思
2016/02/15 职场文书
高中16字霸气押韵班级口号集锦!
2019/06/27 职场文书
利用html+css实现菜单栏缓慢下拉效果的示例代码
2021/03/30 HTML / CSS
如何在python中实现ECDSA你知道吗
2021/11/23 Python