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

小程序一个公共的弹出组件,首先我们创建一个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的小童鞋来说应该困扰了不少.很多小童鞋硬是抓破脑袋也没有办法解决这个问题,那我们今天就来探 ...
随机推荐
- MCU & 51单片机
- meat标签使用
meta是html语言head区的一个辅助性标签.几乎所有的网页里,我们可以看到类似下面这段的html代码: <head> <meta http-equiv="conten ...
- mysql导入csv格式文件
今天测试导入csv格式文件,虽然简单但是如果不注意还是会出现错误,而且mysql在某些方面做的确实对新手不是很友好,记录一下:创建一个csv格式文件:[mysql@xxx1 ycrdb]$ more ...
- tp5.0:替换修改js、css等样式文件路径
首先, 我们要知道,TP5已经不支持绝对路径访问样式文件啦!所以我们不必去花时间去找使用$_SERVER来获取 手册位置:模板->内置标签->资源文件加载 方法一: 过程: 1.首先在模块 ...
- python入门18 继承和多态
继承:子类继承父类的属性和方法 class 子类名(父类1,父类2) 多态:子类重写父类的方法 判断对象是否是某个类的实例: isinstance(object,class) 父类-汽车类 #co ...
- python入门16 递归函数 高阶函数
递归函数:函数内部调用自身.(要注意跳出条件,否则会死循环) 高阶函数:函数的参数包含函数 递归函数 #coding:utf-8 #/usr/bin/python """ ...
- 【LOJ6042】「雅礼集训 2017 Day7」跳蚤王国的宰相(思博题)
点此看题面 大致题意: 给你一棵树,询问对于每个点需要改变多少条边来使得它成为树中到所有点距离和最小的点. 一些初始化及想法 这是一道思博题. 首先我们要知道一个结论:对于这棵树的重心,它的答案必定为 ...
- 【转】Android总结之drawable(hdpi,mdpi,ldpi)文件夹的使用
做Android有段时间了,但是好多细节还没有深入理解,关于Android中drawable文件夹的使用理解的就不是很深入. Android为开发者提供了两种解决适配问题的方法,第一种方式是使用dip ...
- 教你用SingalR实现后台开发程序运行时时检测
在调试js的时候都喜欢用console.log输出相应的运行结果或者查看变量值,以便于调试程序bug,可是程序后台代码运行的时候,本地没有问题,线上代码有问题怎么办呢,写日志是一个办法,可是有没有更直 ...
- idea 一次性自动导包
当复制粘贴一段纯文本代码时,许多类需要导包. 如图 使用optimize imports了,发还是没有办法导入未导入的包,只能删除未使用导包,这跟eclipse不一样,让人很不习惯,查了好多资料都没有 ...