效果图:
目录结构:
共需要修改6个地方,开始前请安装一个依赖:vue-inset-loader
npm i vue-inset-loader
vue-inset-loader的GitHub地址:https://github.com/1977474741/vue-inset-loader
一:新建弹窗文件components/golbalModa.vue
import { mapState } from "vuex";
export default {
computed: {
...mapState(["globalModal"]),
},
methods: {},
};
二:新建store/index.js
import Vue from "vue";
import Vuex from "vuex";
Vue.use(Vuex);
const store = new Vuex.Store({
state: {
globalModal: {
visible: false,
},
},
mutations: {
setModal: (state, data) => {
state.globalModal = data;
},
},
});
export default store;
如果你已经建了store,则在里面进行添加就行了,这里则不赘述。
三:在main.js中引入
import App from "./App";
import Vue from "vue";
import "./uni.promisify.adaptor";
import store from "@/store";
import globalModal from "@/components/globalModal";
Vue.component("globalModal", globalModal);
Vue.config.productionTip = false;
App.mpType = "app";
const app = new Vue({
...App,
store,
});
app.$mount();
四:配置pages.json
{
"insetLoader": {
"config": {
"confirm": ""
},
"label": [
"confirm"
],
"rootEle": "view"
},
"pages": [
{
"path": "pages/index/index",
"style": {
"navigationBarTitleText": "uni-app"
}
}
],
"globalStyle": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "uni-app",
"navigationBarBackgroundColor": "#F8F8F8",
"backgroundColor": "#F8F8F8"
},
"uniIdRouter": {}
}
注意:这里是重点,只要关心insetLoader这个对象就行了,如果你上下步骤都弄好了,而且项目也重启了好几次还是没有显示弹窗,注意你显示弹窗的页面是用了div作为根元素还是view,如果是div,那么"rootEle": "view"要更改为"rootEle": "div",这很重要!!!
如果你"rootEle": "view"配置对了,还是没有在对应的页面打开,那么请检查你那个页面的根元素是否绑定v-if之类的条件判断渲染,我项目的首页就是这样,明明我在测试项目建的弹窗能正常显示,搬运过去就无法显示了,死活都不显示,搞了我好半天才发现是这么问题,一开始时它的确出现了,然后立马就自动消失了,是因为条件判断渲染把它给覆盖掉了。
注意!!!如果你的代码中的根元素有的是div,有的又是view,那么!请你把rootEle设置为.*!!也就是👇
"rootEle": ".*"
五:配置vue.config.js
const path = require("path");
module.exports = {
configureWebpack: {
module: {
rules: [
{
test: /\.vue$/,
use: {
loader: path.resolve(__dirname, "./node_modules/vue-inset-loader"),
},
},
],
},
},
};
六:在App.vue(或任意.vue文件引用)
export default {
onLaunch: function () {
this.$store.commit("setModal", {
visible: true,
});
},
};
完成以上步骤后请记得一定!一定!!一定!!!要重启项目!!!!否者不会生效!!!!
我已将上面代码上传到了gitee,传送门:https://gitee.com/iuniko/global-modal.git