Component({ properties: { text: String, color: { type: String, value: '#fff' }, backgroundColor: { type: String, value: '#e64340' }, duration: { type: Number, value: 3000 } }, methods: { show() { const { duration } = this.data; clearTimeout(this.timer); this.setData({ show: true }); if (duration > 0 && duration !== Infinity) { this.timer = setTimeout(() => { this.hide(); }, duration); } }, hide() { clearTimeout(this.timer); this.setData({ show: false }); } } }); const defaultOptions = { selector: '#van-notify', duration: 3000 }; function Notify(options = {}) { const pages = getCurrentPages(); const ctx = pages[pages.length - 1]; options = Object.assign({}, defaultOptions, parseParam(options)); const el = ctx.selectComponent(options.selector); delete options.selector; if (el) { el.setData({ ...options }); el.show(); } } function parseParam(params = '') { return typeof params === 'object' ? params : { text: params }; } module.exports = Notify;