vue弹出框组件封装实例代码

下面我将为你详细讲解“Vue弹出框组件封装实例代码”的攻略。

一、组件功能

我们要封装的组件是一个弹出框组件,其功能包括:

  1. 支持自定义标题和内容
  2. 支持自定义底部按钮(例如确定和取消)
  3. 支持点击遮罩层关闭弹出框

二、组件使用

在使用该组件时,我们需要做以下几步:

  1. 下载并安装该组件所需要的依赖库
  2. 在项目中引入该组件
  3. 使用该组件

1. 下载并安装依赖库

该组件所需要的依赖库有两个,一个是Vue.js本身,另一个是Vue-awesome库,用于支持使用图标。

你可以使用以下命令来安装这两个依赖库:

npm install vue
npm install vue-awesome

2. 引入组件

将组件代码封装到一个Vue组件中,并导出以供其他文件使用:

<template>
  <div v-show="show" class="dialog">
    <div class="dialog-mask" @click="close"></div>
    <div class="dialog-box">
      <div class="dialog-header">
        <h3 class="dialog-title">{{ title }}</h3>
        <i class="dialog-close-icon" @click="close"></i>
      </div>
      <div class="dialog-body">
        <slot></slot>
      </div>
      <div class="dialog-footer" v-if="buttons.length">
        <button v-for="(item, index) in buttons" :key="index" @click="handleButtonClick(item)">{{ item.text }}</button>
      </div>
    </div>
  </div>
</template>

<script>
import 'vue-awesome/icons/times-circle'
import Icon from 'vue-awesome/components/Icon'

export default {
  name: 'Dialog',
  components: {
    'icon': Icon
  },
  props: {
    show: {
      type: Boolean,
      default: false
    },
    title: {
      type: String,
      default: '提示'
    },
    buttons: {
      type: Array,
      default: () => []
    }
  },
  methods: {
    close() {
      this.$emit('close')
    },
    handleButtonClick(item) {
      this.$emit('button-click', item)
    }
  }
}
</script>

<style>
  .dialog {
    position: fixed;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    z-index: 1000;
    display: flex;
    justify-content: center;
    align-items: center;
  }

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

  .dialog-box {
    display: flex;
    flex-direction: column;
    width: 400px;
    background-color: #fff;
    border-radius: 4px;
    box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.3);
    overflow: hidden;
  }

  .dialog-header {
    display: flex;
    align-items: center;
    padding: 16px;
    border-bottom: 1px solid #f0f0f0;
    font-size: 18px;
    font-weight: bold;
  }

  .dialog-title {
    flex: 1;
  }

  .dialog-close-icon {
    font-size: 22px;
    cursor: pointer;
  }

  .dialog-body {
    padding: 24px;
  }

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

  .dialog-footer button {
    margin-left: 16px;
    font-size: 14px;
    padding: 8px 16px;
    border: none;
    border-radius: 4px;
    color: #fff;
    background-color: #1890ff;
    box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2);
    cursor: pointer;
    outline: none;
  }
</style>

3. 使用组件

在需要使用该组件的页面中,先通过import语句导入该组件,再在模板中使用该组件。

例如,我们在一个Vue页面中使用这个组件:

<template>
  <div>
    <button @click="showDialog">显示弹出框</button>

    <Dialog :show.sync="dialogVisible" :title="title" :buttons="buttons" @close="handleCloseDialog" @button-click="handleButtonClick">
      <p>{{message}}</p>
    </Dialog>
  </div>
</template>

<script>
import Dialog from './components/Dialog'

export default {
  components: {
    Dialog
  },
  data: {
    dialogVisible: false,
    title: '',
    message: '',
    buttons: [
      {
        text: '确定',
        type: 'primary',
        value: true
      },
      {
        text: '取消',
        type: 'default',
        value: false
      }
    ]
  },
  methods: {
    showDialog() {
      this.dialogVisible = true
      this.title = '提示'
      this.message = '确认删除这篇文章吗?'
    },
    handleCloseDialog() {
      this.dialogVisible = false
    },
    handleButtonClick(item) {
      if (item.value) {
        // 点击确定按钮的逻辑代码
      } else {
        // 点击取消按钮的逻辑代码
      }
    }
  }
}
</script>

这个例子中,我们通过按钮触发showDialog函数,然后弹出框显示询问是否确认删除文章。在对话框底部提供了确定和取消两个按钮,用户可以进行选择。

三、代码解释

这个组件主要由以下几个部分组成:

1. 模板部分

这部分是组件的模板代码,用来显示弹出框的样式和元素,并与Vue.js的数据进行绑定。它包括了以下几个部分:

  • v-show指令:控制组件是否显示。

  • .dialog-mask类:显示遮罩层。

  • .dialog-box类:显示对话框内容。

  • .dialog-header类:显示对话框的标题。

  • .dialog-body类:显示对话框的内容。

  • .dialog-footer类:显示对话框底部的按钮。

  • v-for指令:用来循环渲染按钮。

2. 脚本部分

这部分是组件的脚本代码,用来提供组件的功能和与模板进行交互。它包括了以下几个部分:

  • import语句:用来导入依赖的Vue-awesome库和组件的图标。

  • name属性:组件的名称。

  • components属性:组件中使用到的组件。

  • props属性:组件的props属性,用于父组件向子组件传递数据。

  • methods属性:组件的方法。

  • $emit方法:用来触发自定义事件的方法。

3. 样式部分

这部分是组件的样式代码,用来设置组件中各个元素的样式。

它包括了以下几个部分:

  • .dialog类:用来设置对话框的样式。

  • .dialog-mask类:用来设置遮罩层的样式。

  • .dialog-box类:用来设置对话框中包裹内容的盒子的样式。

  • .dialog-header类:用来设置对话框的标题的样式。

  • .dialog-title类:用来设置对话框的标题文字的样式。

  • .dialog-close-icon类:用来设置对话框的关闭图标的样式。

  • .dialog-body类:用来设置对话框的内容的样式。

  • .dialog-footer类:用来设置对话框底部按钮的样式。

  • v-for指令:用来设置按钮的样式。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue弹出框组件封装实例代码 - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • C#将时间转成文件名使用方法

    C#中将时间转成文件名可以通过以下方法实现: 使用DateTime.Now.ToString()方法将当前时间转成字符串。 string fileName = DateTime.Now.ToString("yyyyMMddHHmmssfff"); 通过此方式可以将当前时间转成年月日时分秒毫秒的格式,例如20210712133456005,…

    other 2023年6月26日
    00
  • Win10服务全部禁用了怎么启动?Win10服务全部禁用解决方法

    下面是详细讲解“Win10服务全部禁用了怎么启动?Win10服务全部禁用解决方法”的完整攻略。 问题分析 当 Win10 服务全部禁用之后,将导致系统无法启动各种常见的功能,如网络连接、声音等。因此,我们需要对 Win10 服务进行重新启用。 解决方法 以下是 Win10 服务全部禁用的解决方法: 1. 使用命令行 使用管理员权限启动命令提示符(Win + …

    other 2023年6月27日
    00
  • java线程组构造方法源码解析

    Java线程组构造方法源码解析攻略 Java线程组(ThreadGroup)是一种用于管理线程的机制,它允许将线程组中的线程进行组织和控制。在本攻略中,我们将详细解析Java线程组的构造方法源码,并提供两个示例说明。 构造方法源码解析 Java线程组的构造方法有两种重载形式: 1. ThreadGroup() public ThreadGroup() 该构造…

    other 2023年8月6日
    00
  • c++字符串string拼接

    以下是关于“C++字符串string拼接”的完整攻略,包含两个示例说明。 C++字符串string拼接 在C++中,我们可以使用string类表示字符串,并使用+运算符来拼接字符串。在本攻略中,我们将介绍如何使用string类来拼接字符串。 1. 使用+运算符拼接字符串 在C++中,我们可以使用+运算符来拼接两个字符串。以下是一个示例: #include &…

    other 2023年5月9日
    00
  • 使用AngularJS实现表单向导的方法

    使用AngularJS实现表单向导的方法 表单向导是一种常见的用户界面模式,用于引导用户完成复杂的表单填写过程。在AngularJS中,可以通过以下步骤实现表单向导: 步骤1:设置表单数据模型 首先,我们需要定义一个数据模型来存储表单的各个步骤的数据。可以使用AngularJS的$scope对象来创建一个空的数据模型,例如: $scope.formData …

    other 2023年8月21日
    00
  • Linux CentOS 7.0中java安装与配置环境变量的步骤详解

    Linux CentOS 7.0中java安装与配置环境变量的步骤详解 1. 安装Java 在CentOS 7.0中,可以通过yum来安装Java。打开终端程序,输入以下命令: sudo yum install java 终端会提示你输入管理员密码确认安装。然后等待安装完成即可。 2. 配置环境变量 安装完Java后,为了方便使用,需要配置Java的环境变量…

    other 2023年6月27日
    00
  • 压缩列表牺牲速度来节省内存,Redis是膨胀了吗

    压缩列表是Redis中用于存储较小的列表和集合的数据结构。它通过牺牲一定的读写速度来节省内存空间。当列表或集合中的元素数量较少且元素较小时,Redis会使用压缩列表来存储数据。 压缩列表通过将连续的元素存储在一起来减少内存占用。每个压缩列表节点可以存储多个元素,每个元素可以是字符串或整数。节点中的元素按照顺序存储,并且可以通过偏移量快速访问。此外,压缩列表还…

    other 2023年8月2日
    00
  • 详解js中let与var声明变量的区别

    详解js中let与var声明变量的区别 在JavaScript中,我们可以使用let和var关键字来声明变量。尽管它们都可以用于声明变量,但它们在作用域和变量提升方面有一些重要的区别。 作用域 var声明的变量具有函数作用域,而let声明的变量具有块级作用域。 函数作用域意味着var声明的变量在整个函数内部都是可见的,而块级作用域意味着let声明的变量只在声…

    other 2023年8月20日
    00
合作推广
合作推广
分享本页
返回顶部