官方从 1.6.3 开始对于自定义组件这一块有了比较大的变动,首先比较明显的感觉就是文档比以前全多了,有木有!,现在小程序支持简洁的组件化编程,可以将页面内的功能模块抽象成自定义组件,以便在不同的页面中复用,提高自己代码的可读性,降低自己维护代码的成本!

  接下来,就开始我们的学习吧!

一.具体实现

  要做自定义组件,我们先定一个小目标,比如说我们在小程序中实现一下 通过wx.showModel调用中的所展示弹窗组件,基本效果图如下。

步骤一

  我们初始化一个小程序,删掉里面的示例代码(或者新建一个文件),并新建一个components文件夹,用于存放我们以后开发中的所用组件,今天我们的目的是实现一个 弹框 组件,因此,我们在components组件中新建一个Dialog文件夹来存放我们的弹窗组件,在Dialog下右击新建 Component并命名为dialog后,会生成对应的json wxml wxss js 4个文件,也就是一个自定义组件的组成部分,此时你的项目结构应该如下图所示:

步骤二

  组件初始化工作准备完成,接下来就是组件的相关配置,首先我们需要声明自定义组件,也就是将dialog.json中component字段设为true:

{
"component": true, // 自定义组件什么
"usingComponents": {} // 可选项,用于引用其他组件
}

  其次,我们需要在dialog.wxml文件中编写弹窗组件模版,在dialog.wxss文件中加入弹窗组件样式

dialog.wxss 文件如下:

/* components/Dialog/dialog.wxss */

.wx_dialog_container{
z-index:;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
width: 100%;
position: fixed;
bottom:;
top:;
left:;
background:rgba(0, 0, 0, 0.4);
} .wx-dialog{
width: 300px;
height: auto;
background: #fff;
border-radius: 2px;
} .wx-dialog-title{
display: flex;
justify-content: center;
align-items: center;
padding: 30rpx 20px;
} .wx-dialog-content{
display: flex;
justify-content: center;
align-items: center;
font-size: 34rpx;
color: #96959A;
padding: 0 20px;
margin-bottom: 20px;
} .wx-dialog-footer{
display: flex;
justify-content: space-around;
border-top: 1rpx solid #EEEBEE;
} .wx-dialog-btn{
flex:;
height: 40px;
display: flex;
justify-content: center;
align-items: center;
font-size: 32rpx;
} .wx-dialog-btn:last-child{
border-left: 1rpx solid #EEEBEE;
color: #71C46A;
}

  它们的写法与页面的写法类似,我就不赘述,直接贴代码啦~

dialog.wxml 文件如下:

<!--components/Dialog/dialog.wxml-->
<view class='wx_dialog_container' hidden="{{!isShow}}">
<view class='wx-mask'></view>
<view class='wx-dialog'>
  <view class='wx-dialog-title'>{{ title }}</view>
  <view class='wx-dialog-content'>{{ 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>

  

步骤三

  组件的结构和样式都有了,还缺少什么呢,没错,还缺 js , 眼睛比较犀利的同学,可能已经发现了我们在 dialog.wxml 文件中的会有一些比如 {{ isShow }} 、 {{ title }} 这样的模版变量,还定义了 _cancelEvent 和 _confirmEvent 两个方法,其具体实现就是在 dialog.js 中。

  dialog.js 是自定义组件的构造器,是使用小程序中 Component 构造器生成的,调用 Component 构造器时可以用来指定自定义组件的属性、数据、方法等,具体的细节可以参考一下官方的文档。

  下面我通过代码注释解释一下构造器中的一些属性的使用:

// components/Dialog/dialog.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");
}
}
})

步骤

  截至目前为止,你应该完成了一个自定义弹窗组件的大部分,可是你保存后并没有发现任何变化,因为我们还需要在 index.wxml 文件中引入它!

  首先需要在 index.json 中引入组件

{
"usingComponents": {
"dialog": "/components/Dialog/dialog"
}
}

  然后我们在 index.wxml 中引入它,并增加我们自定义的一些值,如下

<view class="container">
<dialog id='dialog'
title='我是标题'
content='恭喜你,学会了小程序组件'
cancelText='知道了'
confirm='谢谢你'
bind:cancelEvent="_cancelEvent"
bind:confirmEvent="_confirmEvent">
</dialog>
<button type="primary" bindtap="showDialog"> ClickMe! </button>
</view>

  嗯哪,还差最后一步, index.js 配置,没错,这个也很简单,我就复制粘贴了

//index.js//获取应用实例
const app = getApp() Page({ /**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () { //获得dialog组件
this.dialog = this.selectComponent("#dialog");
}, showDialog() {
this.dialog.showDialog();
},
//取消事件
_cancelEvent() {
console.log('你点击了取消');
this.dialog.hideDialog();
}, //确认事件
_confirmEvent() {
console.log('你点击了确定');
this.dialog.hideDialog();
} })

步骤

  到此!大功告成!

  让我们测试一下试试看:

  点击按钮之后呢,会出现如下效果: 

  点击取消或者确定按钮的话,我们在事件中设置了弹窗会关闭,并会打印出相应的信息,具体点击完应该怎么做,就看你们自己发挥了,我只能帮你到这里了~

总结

  现在,你已经基本掌握了小程序中的自定义组件开发技巧,组件在开发中还是很常见的,小程序一样可以模仿三大框架进行对应的组件开发,方便能够快速开发,以及减少开发的中复用的麻烦。

转载:http://www.wxapp-union.com/article-3415-1.html

微信小程序自定义组件实现的更多相关文章

  1. 微信小程序自定义组件,提示组件

    微信小程序自定义组件,这里列举了一个常用的提示自定义组件,调用自定义组件中的方法和字段.仅供参考和学习. 编写组件: 在根目录下添加“components”目录,然后像添加Page页面一样添加自定义组 ...

  2. 微信小程序自定义组件

    要做自定义组件,我们先定一个小目标,比如说我们在小程序中实现一下 WEUI 中的弹窗组件,基本效果图如下. Step1 我们初始化一个小程序(本示例基础版本库为 1.7 ),删掉里面的示例代码,并新建 ...

  3. 微信小程序自定义组件的使用以及调用自定义组件中的方法

    在写小程序的时候,有时候页面的内容过多,逻辑比较复杂,如果全部都写在一个页面的话,会比较繁杂,代码可读性比较差,也不易于后期代码维护,这时候可以把里面某部分功能抽出来,单独封装为一个组件,也就是通常说 ...

  4. 微信小程序自定义组件-下拉框

    这个是网址https://www.cnblogs.com/zjjDaily/p/9548433.html 微信小程序之自定义select下拉选项框组件 知识点:组件,animation,获取当前点击元 ...

  5. 微信小程序自定义组件封装及父子间组件传值

    首先在我们可以直接写到需要的 page 中,然后再进行抽取组件,自定义组件建议 wxzx-xxx 命名 官网地址:https://developers.weixin.qq.com/miniprogra ...

  6. 微信小程序 自定义组件(stepper)

    项目目录: 步骤一:创建组件 声明这一组文件为自定义组件 stepper.json { "component": true, "usingComponents" ...

  7. 微信小程序 自定义组件(modal) 引入组件

    项目结构: 步骤一:创建组件 声明这一组文件为自定义组件 modal.json { "component": true, // 自定义组件声明 "usingCompone ...

  8. 微信小程序 自定义组件 多列选择器 对象数组 ObjectArray 自关联 三级联动

    使用方法 在 Page.json 注册组件 { "usingComponents": { "address-picker": "/component/ ...

  9. 微信小程序自定义组件——接受外部传入的样式类

    https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/wxml-wxss.html 外部样式类 有时, ...

随机推荐

  1. How to run Python code from Sublime

    How to run Python Code from Sublime,and How to run Python Code with input from sublime Using Sublime ...

  2. a标签通过浏览器下载远程图片

    <a href="http://fooku.oss-cn-hongkong.aliyuncs.com/image/store/2nblHVyB6cWyBI7Aq2SEp6aZRBlui ...

  3. Spring常用的三种注入方式

    好文要收藏,摘自:https://blog.csdn.net/a909301740/article/details/78379720 Spring通过DI(依赖注入)实现IOC(控制反转),常用的注入 ...

  4. elasticsearch -- kibana安装配置

    Kibana 是为Elasticsearch设计的开源分析和可视化平台,你可以使用 Kibana 来搜索,查看存储在 Elasticsearch 索引中的数据并与之交互.你可以很容易实现高级的数据分析 ...

  5. html网页中如何给文字加入下划线

    网页中一些重要的文字或者特殊性高的文字,例如:链接,标注等我们需要加上下划线,那么这里我们就需要使用到<U>标签了,写法如下 字体下划线: <u>这里添加内容</u> ...

  6. Python 之 type方法创建类

    type()方法作为元类,用来创建类: type(类名, 父类的元组(针对继承的情况,可以为空),包含属性的字典(名称和值)) 以下代码可以用type()方法来创建: class Myclass(ob ...

  7. jar包冲突排解方法(sbt)

    jar包依赖冲突,版本不兼容会导致各种各样的问题.这里推荐一款sbt插件用于查找项目中的jar包依赖关系,通过该插件可以轻松的看出某个jar包依赖哪些jar,以及某个jar被哪些jar所依赖.此外该插 ...

  8. 软链接ln -s 总结

    ln -s 软链接知识总结 1.软连建立:ln  -s  源文件 软链接文件 2.误区:软链接是创建的,就意味着软链接文件不可以在创建之前存在 3.类比:win快捷方式 4.删除:rm就可以,但源文件 ...

  9. orcad 自带常用原理图库解析

    在cadence 安装目录下文件夹\Cadence\SPB_16.6\tools\capture\library 中有如下常用库,只是部分常用的库,还有很多不常用的也都在目录下面, 1.AMPLIFI ...

  10. [STM32F103]DMA原理

    DMA配置程序过程 使能DMA时钟 a) RCC_AHBPeriphClockCmd(); 初始化DMA通道参数 a) DMA_Init(); 使能串口DMA发送,串口DMA使能函数: a) USAR ...