小程序注册全局组件
开发框架是的uniapp.
组件库中没有找到可以现用的全局可调用的弹窗,只能使用微信提供的wx.showToast()。这个方法可以实现在项目每个位置都可以调用的逻辑。只是最多只可以修改弹窗中的图片。不能满足自定义全局弹窗的功能。
在参考https://zhuanlan.zhihu.com/p/183919769 后,在代码基础上做了修改。
首先,我们需要在创建好自己的公共组件。customer-toast.提供一个_show方法可以展示弹窗。
接下来在main.js中import 组件,绑定组件在全局上。
创建vue.config.js。
module.exports = {
chainWebpack: (config) => {
config.module
.rule(‘vue‘)
.use(‘vue-loader‘)
.loader(‘vue-loader‘)
.tap((options) => {
const compile = options.compiler.compile
options.compiler.compile = (template, ...args) => {
if (args[0].resourcePath.match(/^pages/)) {
template = template.replace(
/[\s\S]+?<[\d\D]+?>/,
(_) => `${_}
<custom-toast ref="custom-toast" />
`
)
}
return compile(template, ...args)
}
return options
})
}
}
我们在页面上使用this.$refs.custom-taost._show(msg,type)。可以展示弹窗。
展示弹窗方法可以绑定在vue对象上,我们可以在每一个页面使用this.customToast(title,type)来使用。
Vue.component(‘custom-toast‘, CustomToast) Vue.prototype.customToast = function (title, type) { this.$refs[‘custom-toast‘][‘_show‘](title, type) }
在公共js方法中调用组件,this指向目的不统一。我通过获取小程序当前页面的属性,方法来获取到refs来展示弹窗。
const _toast = function (msg, type) { const pages = getCurrentPages() const ctx = pages[pages.length - 1] ctx.$vm.$refs[‘custom-toast‘][‘_show‘](msg, type) }
这样就可以全局调用弹窗组件了。有可能有更好的方法~
小程序注册全局组件
原文:https://www.cnblogs.com/wlxll/p/15048686.html