uniapp自定义弹框的方法

下面我将详细讲解uniapp自定义弹框的方法。

1. 弹框组件编写

在uniapp项目中,我们可以自定义一个弹框组件,以实现自定义弹框的效果。首先,在components目录下创建一个名为customDialog的组件文件夹,然后将该组件注册到全局:

// 在main.js中注册
import customDialog from '@/components/customDialog.vue'
Vue.component('customDialog', customDialog)

接下来,我们在customDialog.vue中编写弹框组件的代码,根据需求自定义组件的样式和功能,如下所示:

<template>
  <div class="custom-dialog" v-if="visible">
    <div class="custom-dialog-mask" @click="close"></div>
    <div class="custom-dialog-container" :style="{ width: width + 'px', height: height + 'px' }">
      <div class="custom-dialog-header">{{ title }}</div>
      <div class="custom-dialog-body">
        <slot></slot>
      </div>
      <div class="custom-dialog-footer">
        <button class="btn" @click="close">关闭</button>
        <button class="btn" @click="confirm">确定</button>
      </div>
    </div>
  </div>
</template>

<script>
export default {
  name: 'customDialog',
  props: {
    visible: { // 控制弹框的显示隐藏
      type: Boolean,
      default: false
    },
    title: { // 弹框的标题
      type: String,
      default: ''
    },
    width: { // 弹框的宽度
      type: Number,
      default: 400
    },
    height: { // 弹框的高度
      type: Number,
      default: 200
    }
  },
  methods: {
    close() { // 关闭弹框
      this.$emit('update:visible', false)
    },
    confirm() { // 确认的操作
      this.$emit('confirm')
    }
  }
}
</script>

<style scoped>
.custom-dialog {
  position: fixed;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
}

.custom-dialog-mask {
  background-color: rgba(0, 0, 0, 0.5);
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
}

.custom-dialog-container {
  position: relative;
  margin: auto;
  background-color: #fff;
  border-radius: 6px;
  overflow: hidden;
  box-shadow: 0 0 10px rgba(0, 0, 0, 0.3);
}

.custom-dialog-header {
  padding: 12px;
  font-size: 18px;
  background-color: #f4f4f4;
  border-bottom: 1px solid #ccc;
}

.custom-dialog-body {
  padding: 20px;
  font-size: 16px;
}

.custom-dialog-footer {
  display: flex;
  justify-content: flex-end;
  padding: 12px;
  border-top: 1px solid #ccc;
}

.btn {
  margin-left: 10px;
  padding: 6px 12px;
  font-size: 14px;
  border-radius: 4px;
  border: none;
  background-color: #58a;
  color: #fff;
  cursor: pointer;
}
</style>

2. 调用弹框组件

在组件中,你可以通过<customDialog />的方式,调用自定义弹框组件,并通过props控制弹框的显示、标题、宽高等参数。以下是示例代码:

<template>
  <div>
    <button class="btn" @click="showDialog">弹出自定义弹框</button>

    <customDialog
      :visible.sync="dialogVisible"
      title="我是自定义弹框"
      :width="420"
      :height="240"
      @confirm="handleConfirm"
    >
      <p>这里可以添加自定义的内容</p>
    </customDialog>
  </div>
</template>

<script>
export default {
  data() {
    return {
      dialogVisible: false
    }
  },
  methods: {
    showDialog() { // 显示弹框
      this.dialogVisible = true
    },
    handleConfirm() { // 处理弹框确认操作
      console.log('确认操作')
      this.dialogVisible = false
    }
  }
}
</script>

<style>
.btn {
  padding: 6px 12px;
  font-size: 14px;
  border-radius: 4px;
  border: none;
  background-color: #58a;
  color: #fff;
  cursor: pointer;
}
</style>

以上两个示例,分别演示了通过按钮点击事件来控制自定义弹框的显示、以及在弹框中添加自定义内容和处理确认操作的情况。

通过以上两个步骤,我们就可以完成uniapp自定义弹框的制作了。需要注意的是,弹框组件的样式和功能可以根据自己的需求来进行定制,这里只是提供了一个基础的示例。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:uniapp自定义弹框的方法 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • vue.js中$watch的用法示例

    下面是关于”vue.js中$watch的用法示例”的完整攻略: 1. 什么是$watch 在Vue.js中,我们经常需要使用到响应式数据,$watch是Vue.js提供的一个侦听器,用来监听某个数据项的变化,一旦该数据项发生变化,$watch负责触发回调函数,执行相应的操作。 2. $watch的基本用法 在Vue.js中,我们可以使用vm.$watch方法…

    Vue 2023年5月27日
    00
  • Vue3源码分析reactivity实现方法示例

    “Vue3源码分析reactivity实现方法示例”的完整攻略如下: 一、前置知识 在学习本文档前,你需要了解以下知识点: Vue3的基本使用及Composition API JavaScript的Proxy和Reflect对象 二、reactivity的实现原理 Vue3中的reactivity是基于JavaScript的Proxy对象实现的。reacti…

    Vue 2023年5月27日
    00
  • Vue.js 2.0 移动端拍照压缩图片上传预览功能

    下面是对于“Vue.js 2.0 移动端拍照压缩图片上传预览功能”的完整攻略: 目标技术点 在实现 Vue.js 移动端拍照压缩图片上传预览功能时,需要掌握以下技能点: Vue.js 2.x 移动端兼容性问题的解决方案 HTML5 FormData HTML5 File API Image resize(图片压缩) 目标功能实现 实现以上技术点后,即可实现以…

    Vue 2023年5月29日
    00
  • vue-router项目实战总结篇

    下面是“vue-router项目实战总结篇”的完整攻略。 安装vue-router 在项目中使用vue-router,需要先安装vue-router库。 # 使用NPM进行安装 npm install vue-router # 使用Yarn进行安装 yarn add vue-router 配置vue-router 接下来,需要在Vue实例中配置vue-rou…

    Vue 2023年5月28日
    00
  • Vue export import 导入导出的多种方式与区别介绍

    下面我会详细讲解“Vue export import 导入导出的多种方式与区别介绍”的完整攻略。 1. Vue export import 在 Vue 中,我们经常需要在组件或模块之间共享代码,而 Vue 提供了 export 和 import 关键字来实现这个功能。 1.1 export export 是一个 ES6 中的关键字,用于将模块中的变量、函数、…

    Vue 2023年5月27日
    00
  • 详解Vue之事件处理

    详解Vue之事件处理 Vue.js 是一款流行的前端框架,它的事件处理能力非常强大。本文将详细讲解 Vue.js 中的事件处理,包括如何使用 v-on 指令绑定事件、如何传递参数和修饰符、以及如何使用自定义事件等。 绑定事件 在 Vue.js 中,我们可以使用 v-on 指令来绑定事件。省略了 v-on 直接写 @ 符号,作用相同,下面的几个示例中直接使用 …

    Vue 2023年5月27日
    00
  • axios post提交formdata的实例

    下面是详细的攻略。 1. axios post提交formdata的基本语法 在使用axios提交formdata时,需要使用FormData类来创建一个表单对象。具体语法如下: const formData = new FormData() formData.append(‘name1’, ‘value1’) formData.append(‘name2’…

    Vue 2023年5月28日
    00
  • springboot整合vue实现上传下载文件

    那么让我们来详细讲解关于springboot整合vue实现上传下载文件的完整攻略吧。 步骤1:创建Spring Boot项目 首先,我们需要创建一个Spring Boot项目,以提供后台服务。我们可以使用Spring Initializr来创建一个基于Maven的Spring Boot项目。在创建过程中,需要添加Web、JPA、MySQL等相关依赖。 步骤2…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部