今天寫微信小程序忽然發現一個尷尬的問題,請求報錯須要提示,就去小程序API裏找,可悲的小程序的toast並不能知足個人需求,原生提供的方法調用以下json
wx.showToast({ title: '成功', icon: 'succes', duration: 1000, mask:true })
下面是官方API的說明小程序
能夠看到支持的圖標只有兩種,連基本的warning和error都沒有,最可悲的是title最多隻支持7個漢字的長度,徹底不能忍啊,如今哪一個框架裏尚未個正兒八經提示框的組件,想一想仍是本身寫一個算了,下面是效果圖微信小程序
下面來講下小程序實現自定義公共組件的方法,以自定義toast爲例微信
一、新建toast組件框架
在toast.json裏修改以下,設置爲組件xss
{ "component": true }
toast.wxml佈局
<view class='wx-toast-box' animation="{{animationData}}"> <view class='wx-toast-content'> <view class='wx-toast-toast'>{{ content }}</view> </view> </view>
定義樣式,toast.wxss,這裏使用flex佈局,代碼很簡單,也沒什麼好說的,直接貼上flex
.wx-toast-box{ display: flex; width: 100%; justify-content: center; position: fixed; z-index: 999; bottom:80rpx; opacity: 0; } .wx-toast-content{ max-width: 80%; border-radius:30rpx; padding: 30rpx; background: rgba(0, 0, 0, 0.6); } .wx-toast-toast{ height: 100%; width: 100%; color: #fff; font-size: 28rpx; text-align: center; }
toast.js動畫
Component({ options: { multipleSlots: true // 在組件定義時的選項中啓用多slot支持 }, /** * 私有數據,組件的初始數據 * 可用於模版渲染 */ data: { // 彈窗顯示控制 animationData: {}, content: '提示內容' }, /** * 組件的方法列表 */ methods: { /** * 顯示toast,定義動畫 */ showToast(val) { var animation = wx.createAnimation({ duration: 300, timingFunction: 'ease', }) this.animation = animation animation.opacity(1).step() this.setData({ animationData: animation.export(), content: val }) /** * 延時消失 */ setTimeout(function () { animation.opacity(0).step() this.setData({ animationData: animation.export() }) }.bind(this), 1500) } } })
二、在父級組件中調用公共組件,以login頁面爲例this
在login.json中註冊組件
{ "navigationBarTitleText": "登陸註冊", "usingComponents":{ "toast": "../common/toast/toast" } }
login.wxml中調用組件
<view> <toast id='toast'> </toast> </view>
login.js裏點擊登錄錄的時候調用顯示showDialog方法
onReady: function () { this.toast = this.selectComponent("#toast"); }, listenerLogin: function() { this.toast.showToast('恭喜你,得到了toast'); },