h5端可以使用vue.extend创建组件构造器后append至document中,但是app端没有document对象
(需求是在外部端公共的js里调用自定义的confirm组件,而组件是写在页面或组件中,因此控制不到,原生uni.showModalui又不满意)
6***@qq.com
- 发布:2020-01-15 21:25
- 更新:2021-09-23 14:53
- 阅读:10152
自定义的组件里
uni.$on('自定义的事件名', (options) => {
// ... 显示的逻辑
this.show()
})
其他地方调用
uni.$emit('自定义的事件名', options)
main.js
const androidUtil = require('./common/android-util.js');
globalThis.tools = androidUtil;
common/android-util.js
module.exports = {
/**
* 弹窗组件
* */
showPopup(options) {
let params = {
title: "提示",
content: "自定义内容",
align: "center", // 对齐方式 left/center/right
cancelText: "取消", // 取消按钮的文字
cancelColor: "#FFFFFF", // 取消按钮颜色
confirmText: "确定", // 确认按钮文字
confirmColor: "#FFFFFF", // 确认按钮颜色
showCancel: true // 是否显示取消按钮,默认为 true
}
Object.assign(params, options)
//#ifndef APP-PLUS
// 除开app平台
return new Promise((resolve) => {
uni.showModal({
...params,
success: res => {
if (res.confirm) {
resolve(true)
} else if (res.cancel) {
resolve(false)
}
},
fail: (res) => {
console.log(res)
}
})
})
//#endif
//#ifdef APP-PLUS
// app平台
uni.navigateTo({
url: "/pages/modal/modal",
success: (res) => {
res.eventChannel.emit('receiveOptions', {
data: params
});
},
fail(res) {
console.log(res)
}
})
return new Promise((resolve) => {
uni.$once("AppModalCancel", (e) => {
uni.$off('AppModalConfirm');
resolve(false)
})
uni.$once("AppModalConfirm", (e) => {
uni.$off('AppModalCancel');
resolve(e || true)
})
});
//#endif
}
}
/pages/modal/modal.nvue 见附件..样式自己修改 小程序就可以使用Vue.prototype.***= androidUtil;都差不多
调用方法就tools.showPopup({}).then()
6***@qq.com (作者)
不是很明白,能举个例子吗? 谢谢了
2020-01-16 15:32