自定义小程序toast组件

微信小程序自带toast提示并不好用,对于项目中UI设计不同要显示后台不同接口返回的信息来说,不能满足其需求,所以还是跟着网上的一些方法建了一个比较简单的,记录如下:
首先要完成的几个步骤:

  • 根据UI 的设计图建一个模板,在pages里增加了toast页面;
  • 创建组件的目录components 增加显示或隐藏toast 的js,并在app.js 中全局引入,并在初始化该小程序的时候传入。
  • 在app.wxss 当中引入或者直接在app.wxss中增加toast模板的样式;


    目录.png

    app.js.png
/* app.wxss toast提示 */
.toast_content_box {
display: flex;
width: 100%;
height: 100%;
justify-content: center;
align-items: center;
position: fixed;
z-index: 999;
background:rgba(0,0,0,0.6);
}
.toast_content {
width: 50%;
padding: 30rpx;
background:rgba(0,0,0,0.6);
border-radius: 20rpx;
}
.toast_content_text {
height: 100%;
width: 100%;
color: #fff;
font-size: 28rpx;
text-align: center;
}

toastTest.wxml很好理解先构建出页面的结构:

<template name="toast">
<view class="toast_content_box" wx:if="{{ isHide }}">
<view class="toast_content">
<view class="toast_content_text">
{{content}}
</view>
</view>
</view>
</template>

pages里toast下的toast.js只是用来注册一个页面不做其他操作

Page({
data: {
}
})

组件里的toast.js 里逻辑是这样的:

let _compData = {
'_toast_.isHide': false,// 控制组件显示隐藏
'_toast_.content': ''// 显示的内容
}
let toastPannel = {
// toast显示的方法
show: function (data) {
let self = this;
this.setData({ '_toast_.isHide': true, '_toast_.content': data });
setTimeout(function () {
self.setData({ '_toast_.isHide': false })
}, 3000)
}
}
function ToastPannel() {
// 拿到当前页面对象
let pages = getCurrentPages();
let curPage = pages[pages.length - 1];
this.__page = curPage;
Object.assign(curPage, toastPannel);
// 附加到page上,方便访问
curPage.toastPannel = this;
// 把组件的数据合并到页面的data对象中
curPage.setData(_compData);
return this;
}
module.exports = {
ToastPannel
}

主要思想就是把toast组件的属性方法注入到当前页面的实例里,让当前页面可以调用。


  • 下面就是解决怎么调用的问题了
    在需要使用toast的页面的模板中引入模板:
<import src="../../pages/toast/toastTest.wxml"/>
<template is="toast" data="{{ ..._toast_ }}"/>

对应的js里onLoad 的时候要实例化一个ToastPannel:

  let app = getApp();
  new app.ToastPannel();

最后在页面的逻辑方法里就可以使用啦

that.show('账号或密码错误');

显示如下:


toast.png

总结:刚开始用小程序不久,尚未构建一个够规模的大工程,此组件是可以实现自定义显示toast但是缺点也很明显必须每个使用到的页面都得引入模板一次,后面如果有更好的方式再完善吧

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,966评论 25 709
  • 昨天看了一下微信小程序官方文档,总结一下自己学习的个人心得. 首先从官方文档给的框架说起,微信小程序官方文档给出了...
    Mr大大大阅读 47,296评论 9 68
  • 今天是同事喝了酒,还驾驶车辆去上班,这种侥幸心理要不得,果然就被交警给拦了下来,然后还发酒疯打了交警几下,把交警的...
    文所闻阅读 215评论 0 0
  • 当一个人过了初中阶段后很难再傻乎乎地活着。 Q是个例外,我认识Q的时候十九岁,她长相清秀,身高偏矮,当年粤语歌还风...
    郭栩鹏阅读 366评论 0 1
  • 去年,有个朋友跟我交流,问道,他在上海做房地产行业,主要销售中、高档写字楼。已经在公司上班有一个多月了,但是业绩不...
    Aalizzwell_15fc阅读 1,639评论 0 2