微信小程序之公共组件写法
我们要实现如下图功能

小程序一个公共的弹出组件,首先我们创建一个pop文件

然后在生成的pop.json文件中将component定义为true
{
"component": true
}
为pop.wxml添加内容
<!--pages/common/pop/pop.wxml-->
<view class='wx_dialog' hidden="{{!isShow}}">
<view class='wx-mask'></view>
<view class='wx-dialog-content'>
<view class='wx-dialog-title'>{{ title }}</view>
<view class='wx-dialog-contents'>{{ content }}</view>
<view class='wx-dialog-footer'>
<view class='wx-dialog-btn' catchtap='_cancelEvent'>{{ cancelText }}</view>
<view class='wx-dialog-btn' catchtap='_confirmEvent'>{{ confirmText }}</view>
</view>
</view>
</view>
pop.wxss
/* pages/common/pop/pop.wxss */
.wx_dialog {
position: fixed;
left: ;
right: ;
top: ;
bottom: ;
}
.wx-mask {
position: absolute;
left: ;
right: ;
top: ;
bottom: ;
background: rgba(, , , .);
z-index: ;
}
.wx-dialog-content {
position: absolute;
background: #fff;
left: %;
top: %;
transform: translate(-%, -%);
width: %;
/* height: 200px; */
padding-bottom: 60px;
z-index: ;
border-radius: 5px;
}
.wx-dialog-contents {
padding: 10px;
}
.wx-dialog-title {
padding: 5px 10px;
font-size: 14px;
}
.wx-dialog-footer {
position: absolute;
left: ;
right: ;
bottom: ;
font-size: 14px;
height: 40px;
line-height: 40px;
border-top: 1px solid #eee;
}
.wx-dialog-btn {
display: inline-block;
width: %;
cursor: pointer;
text-align: center;
}
.wx-dialog-btn:first-child {
border-right: 1px solid #eee;
}
pop.js
// pages/common/pop/pop.js
Component({
options: {
multipleSlots: true // 在组件定义时的选项中启用多slot支持
},
/**
* 组件的属性列表
* 用于组件自定义设置
*/
properties: {
// 弹窗标题
title: { // 属性名
type: String, // 类型(必填),目前接受的类型包括:String, Number, Boolean, Object, Array, null(表示任意类型)
value: '标题' // 属性初始值(可选),如果未指定则会根据类型选择一个
},
// 弹窗内容
content: { type: String, value: '弹窗内容' },
// 弹窗取消按钮文字
cancelText: { type: String, value: '取消' },
// 弹窗确认按钮文字
confirmText: { type: String, value: '确定' }
},
/**
* 私有数据,组件的初始数据
* 可用于模版渲染
*/
data: { // 弹窗显示控制
isShow: false
},
/**
* 组件的方法列表
* 更新属性和数据的方法与更新页面数据的方法类似
*/
methods: {
/**
* 公有方法
*/
//隐藏弹框
hideDialog() {
this.setData({
isShow: !this.data.isShow
})
},
//展示弹框
showDialog() {
this.setData({
isShow: !this.data.isShow
})
},
/**
* 内部私有方法建议以下划线开头
* triggerEvent 用于触发事件
*/
_cancelEvent() { //触发取消回调
this.triggerEvent("cancelEvent")
},
_confirmEvent() { //触发成功回调
this.triggerEvent("confirmEvent");
}
}
})
在父级页面的.js文件中添加
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
this.dialog = this.selectComponent("#dialog");
},
showDialog() {
this.dialog.showDialog();
},
//取消事件
_cancelEvent() {
console.log('你点击了取消');
this.dialog.hideDialog();
},
//确认事件
_confirmEvent() {
console.log('你点击了确定');
this.dialog.hideDialog();
},
父级页面的.json文件中添加
{
"usingComponents": {"pop": "../common/pop/pop"}
}
在父级页面的.wxml文件中添加
<view class="pop">
<pop id='dialog' title='我是标题' content='恭喜你,学会了小程序组件' cancelText='知道了' confirm='谢谢你' bind:cancelEvent="_cancelEvent" bind:confirmEvent="_confirmEvent">
</pop>
</view>
然后就大功告成了

如果想注册到全局,则需要在app.json页面添加挂载:
{
"usingComponents": {"pop": "../common/pop/pop"}
}
微信小程序之公共组件写法的更多相关文章
- 微信小程序--页面与组件之间如何进行信息传递和函数调用
微信小程序--页面与组件之间如何进行信息传递和函数调用 这篇文章我会以我自己开发经验从如下几个角度来讲解相关的内容 页面如何向组件传数据 组件如何向页面传数据 页面如何调用组件内的函数 组件如何调 ...
- 原创:WeZRender:微信小程序Canvas增强组件
WeZRender是一个微信小程序Canvas增强组件,基于HTML5 Canvas类库ZRender. 使用 WXML: <canvas style="width: 375px; h ...
- 微信小程序之swiper组件高度自适应
微信小程序之swiper组件高度自适应 要求: (顶部广告栏 ) 改变swiper组件的固定高度,使之随内部每张图片的高度做自适应 原理: 图片加载完之后,获取图片的原始宽高,根据宽高比,计算出适应后 ...
- 微信小程序中的组件使用1
不管是vue还是react中,都在强调组件思想,同样,在微信小程序中也是使用组件思想来实现页面复用的,下面就简单介绍一下微信小程序中的组件思想. 组件定义与使用 要使用组件,首先需要有组件页面和使用组 ...
- 微信小程序基于swiper组件的tab切换
代码地址如下:http://www.demodashi.com/demo/14010.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.co ...
- 关于微信小程序前端Canvas组件教程
关于微信小程序前端Canvas组件教程 微信小程序Canvas接口函数 上述为微信小程序Canvas的内部接口,通过熟练使用Canvas,即可画出较为美观的前端页面.下面是使用微信小程序画图的一些 ...
- uni-app开发微信小程序引入UI组件库(Vant-weapp)步骤
uni-app开发微信小程序引入UI组件库(Vant-weapp)步骤 这里以vant-weapp为例 uni-app官方文档介绍引入组件的方法 1. 新建相关目录 根目录下创建 wxcomponen ...
- 微信小程序校历组件
微信小程序校历组件 校历组件,可以作为校园小程序的插件,如果觉得不错,点个star吧
- 微信小程序内置组件web-view的缓存问题探讨
前言:博客或者论坛上面,还有自习亲身经历,发现微信小程序的webview组件的页面缓存问题相当严重,对开发H5的小童鞋来说应该困扰了不少.很多小童鞋硬是抓破脑袋也没有办法解决这个问题,那我们今天就来探 ...
随机推荐
- git本地分支重命名
1. 本地分支重命名 git branch -m oldbranchname newbranchname 2. 远程分支重命名 (假设本地分支和远程对应分支名称相同) a. 重命名远程分支对应的本地分 ...
- toMapFromStage layerDefinitions ClassBreakRenderer
class Map 方法 toMapFromStage 用于把屏幕坐标转换为地理坐标 public function toMapFromStage(stageX:Number, stageY:Numb ...
- java调优参数记录
java -server -Xms1024m -Xmx2048m -XX:+UseParallelGC -XX:+UseG1GC -XX:ParallelGCThreads=4 -XX:+UsePar ...
- 【Leetcode】【Easy】Remove Element
Given an array and a value, remove all instances of that value in place and return the new length. T ...
- x86 分页机制——虚拟地址到物理地址寻址
x86下的分页机制有一个特点:PAE模式 PAE模式 物理地址扩展,是基于x86 的服务器的一种功能,它使运行 Windows Server 2003, Enterprise Edition 和 Wi ...
- 第五章 LED的魔性操作
想必大家都见过城市里漂亮的led广告牌吧,这一节我将带大家学习这些LED广告牌最基本的实现原理. 初识LED 接线方法:D1~D8从接23~37号数字端口,v1和前面的针头分别接41号和39号数字端口 ...
- DOS下启动MySQL时输入net start mysql 提示服务名无效的问题
原因:mysql服务名错误. 正确做法:net start +mysql服务名
- SSD 从形式到实质之改变
SSD 从形式到实质之改变 作者:廖恒 SSD的物理尺寸之混战正在进行其中. 数据中心的硬件架构师由于要规划下一代server的机械设计.还要制定JBOD的设计规范,想必面临不少困 ...
- POJ 1745 【0/1 背包】
题目链接:http://poj.org/problem?id=1745 Divisibility Time Limit: 1000MS Memory Limit: 10000K Total Sub ...
- java读取资源文件(Properties)
四步: java代码 //new一个读取配置文件 Properties properties=new Properties(); //获取文件路径 String path=request.getSer ...