(网上找到的方法都不支持小程序和app)
看一下这篇文章,这种方式可以直接使用命令的方式去调用组件,类似于uniapp的uni.showModal
uniapp 微信小程序里面好像用不了Vue.extend去动态装载页面实现弹窗功能(保留疑问,只是听小伙伴这么说),那就好像js做不了这个装载页面的操作了,如果每个页面引入麻烦,不如定义成全局组件就不用引入,但我觉得不好,毕竟它的场景也不是那么多有点占用;目前能想到的还是单独引入组件使用
小程序侧不支持dom的动态插入,所以我们在运行时不能实现组件的新增和删除;
但是编译时往template插入标签(相当于每个页面都会添加该组件),需要的时候调用对应的组件钩子就行;
一下仅供参考:
chainWebpack: (config) => {
config.module
.rule('vue')
.use('vue-loader')
.loader('vue-loader')
.tap((options) => {
const compile = options.compiler.compile;
// compile函数修改template代码,为pages中每一个页面增加Toast与Loading
options.compiler.compile = (template, ...args) => {
if (args[0].resourcePath.match(/^pages/)) {
// 最简单的方式是包裹一层view,也可以使用正则,需要额外判断单标签页面
template = `<view>
${template} // 原
<toast ref="toast"/> //插入的组件
<loading ref="loading"/>//插入的组件
</view>`;
}
return compile(template, ...args);
};
return options;
});
},
调用的时候可以通过ref,也可以Vuex控制组件状态