uni-app 全局弹框插件需求

发布于 1周前 作者 phonegap100 来自 Uni-App

uni-app 全局弹框插件需求

uniapp做的app需要一个uni.showmodel的弹框,样式和uni.showmodel一样,但是内容可以居左居右,可以全局使用,各位大大谁可以提供一个呢,不是原生插件的,就是vue页面写的

4 回复

示例:g-show-modal(作者: G_brother)
使用 plus.nativeObj 自己画一个就行了,再使用函数式组件可以实现全局,可参考上面的示例。

针对uni-app全局弹框插件的需求,可以通过封装一个全局的弹框组件,并在全局状态管理工具(如Vuex或Pinia)中控制其显示与隐藏。以下是一个简单的实现示例,包含组件定义和全局状态管理的基本代码。

1. 创建全局弹框组件

首先,在components目录下创建一个名为GlobalModal.vue的组件:

<template>
  <view v-if="visible" class="modal-overlay">
    <view class="modal-content">
      <slot></slot>
      <button @click="closeModal">关闭</button>
    </view>
  </view>
</template>

<script>
export default {
  data() {
    return {
      visible: false
    };
  },
  methods: {
    showModal() {
      this.visible = true;
    },
    closeModal() {
      this.visible = false;
      this.$emit('update:visible', false);
    }
  },
  props: ['visible']
};
</script>

<style>
.modal-overlay {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background: rgba(0, 0, 0, 0.5);
  display: flex;
  justify-content: center;
  align-items: center;
}
.modal-content {
  background: white;
  padding: 20px;
  border-radius: 10px;
}
</style>

2. 使用Pinia进行全局状态管理(可选Vuex)

安装Pinia:

npm install pinia

store目录下创建一个index.js文件:

import { defineStore } from 'pinia';

export const useAppStore = defineStore('app', {
  state: () => ({
    modalVisible: false
  }),
  actions: {
    showModal() {
      this.modalVisible = true;
    },
    closeModal() {
      this.modalVisible = false;
    }
  }
});

3. 在主应用中使用全局弹框

main.js中引入Pinia:

import { createApp } from 'vue';
import { createPinia } from 'pinia';
import App from './App.vue';

const app = createApp(App);
const pinia = createPinia();
app.use(pinia);
app.mount('#app');

在需要使用弹框的页面或组件中:

<template>
  <button @click="openModal">打开弹框</button>
  <GlobalModal :visible.sync="modalVisible">
    <text>这是一个全局弹框</text>
  </GlobalModal>
</template>

<script>
import { useAppStore } from '@/store';
import GlobalModal from '@/components/GlobalModal.vue';

export default {
  components: { GlobalModal },
  setup() {
    const store = useAppStore();
    return {
      modalVisible: store.modalVisible,
      openModal: store.showModal
    };
  }
};
</script>

以上代码展示了如何在uni-app中实现一个全局弹框插件的基本框架,包括组件定义、全局状态管理以及在页面中的使用。根据实际需求,可以进一步扩展和美化弹框组件。

回到顶部