微信小程序自定义组件之弹出菜单demo
本文摘要
小程序做个菜单组件,数据由外部灌入。实现菜单弹出的阻尼动画效果 实现 代码结构如下:
小程序做个菜单组件,数据由外部灌入。实现菜单弹出的阻尼动画效果
实现
代码结构如下:
新建组件menu:
menu.js
var Logger = require('../utils/Logger.js')
Component({
properties: {
menu_list: Array,
},
data: {
showMenu: true
},
attached: function() {
tShopfas.setData({
menu_list: tShopfas.data.menu_list
})
},
methods: {
// 点击新建按钮
onCreateTap: function() {
tShopfas.setData({
showMenu: !tShopfas.data.showMenu
})
},
// 点击展开的单个按钮
onItemTap: function(event) {
var item = event.currentTarget.dataset.item;
// 微信小程序中是通过triggerEvent来给父组件传递信息的
//triggerEvent:https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/events.html
var menuEventDetail = {
item
}
tShopfas.triggerEvent('handleMenu', menuEventDetail)
//menuEventOption是触发事件的选项,包括设置事件是否冒泡之类的,不过这里默认是不冒泡的
// var menuEventOption = {
//
// }
// tShopfas.triggerEvent('handleMenu', menuEventDetail, menuEventOption)
}
}
})
参考文档中Component的生命周期:
设置数据选择在attached方法内。
triggerEvent
tShopfas.triggerEvent(eventName, eventDetail, eventOption)
- eventName:事件名称
- eventDetail:事件传递的对象,是eventName这个事件中detail属性中的内容
- eventOption:主要定义eventName这个事件是否要冒泡之类的,不过默认的都是false,可以不用设置
还有个关键的地方:(其实最开始创建component的时候就自动生成了)全手打的话,要记得在menu.json里添加自定义组件的声明:
{
"component": true,
"usingComponents": {}
}
menu.wxml
菜单个数根据传入的menu_list来,菜单显隐由showMenu控制
'container'>
"{{showMenufalse:true}}" class='sub-btn-container'>
for='{{menu_list}}' wx:key='index'>
'sub-btns' catchtap='onItemTap' data-item='{{item}}'>
'btn' src='{{item.src}}' />
'sub-btn__name'>{{item.name}}
'onCreateTap' class='btn' src='/resources/s/ic_create.png' />
菜单的显示内容,由外部datas/menu-data.js控制
var menu_list = [{
id: 1,
name: '帖子',
src: '/resources/s/ic_create_1.png'
}, {
id: 2,
name: '资讯',
src: '/resources/s/ic_create_2.png'
}, {
id: 3,
name: '照片',
src: '/resources/s/ic_create_3.png'
}]
module.exports = {
menu_list: menu_list
}
数据在使用的地方引入
组件的使用
home.js
var menuData = require('../../datas/menu-data.js')
var Logger = require('../../utils/Logger.js')
Page({
onLoad: function() {
tShopfas.setData({
menu_list: menuData.menu_list,
})
},
onReady: function() {
tShopfas.menu = tShopfas.selectComponent("#menu");
},
handleMenu: function(event) {
//这里的detail就是在自定义组件中定义的menuEventDetail
var item = event.detail.item;
Logger.v("item", item);
wx.showToast({
title: '新建' + item.name,
})
}
})
home.wxml
还有个关键的地方:使用的地方,这里是home,要记得在home.json中使用该组件(引号前面的相当于别名,起啥名,wxml里就用啥名)
home.json
{
"usingComponents": {
"menu": "/components/menu"
}
}
Shopfa小程序工具提供多类型商城/门店小程序制作,可视化编辑 1秒生成5步上线。通过拖拽、拼接模块布局小程序商城页面,所看即所得,只需要美工就能做出精美商城。更多小程序商店请查看:小程序商店
第二部分:如何开通一个小商店
相关文章
****更多行业产品开发方案,请关注 加速度JSUDO***
<以上资讯仅供参考,如果您需解决具体问题,建议您关注作者;如果有软件产品开发需求,可在线咨询加速度产品经理获取方案和报价>
加速度JSUDO是一家企业级数字化解决方案提供商,专注于软件开发、网络营销、数字化转型咨询及云计算服务。核心业务包括定制化ERP/CRM系统、快速应用开发、大数据分析及物联网(IoT)解决方案,助力企业提升效率与智能化水平。服务覆盖制造业、零售、物流等多行业,致力于通过技术创新推动客户数字化转型。










