项目实现|利用el-form+el-popover实现一个简单的弹框🎉

3.1 需求

效果:

3.2 实现

父组件:

父组件设计包含一个按钮,一个el-popover、一个子组件

xml 复制代码
  <div>
    <el-popover placement="bottom" trigger="click" ref="popover">
      <dialog-comp @save="save" ref="dialog"></dialog-comp>
      <el-button slot="reference" type="primary" size="mini">点击出现弹框</el-button>
    </el-popover>
  </div>

父组件的工作:

拿到子组件提交的值;关闭popover、清空子组件弹框的数据

kotlin 复制代码
   save (v) {
      this.inputValue = v.value
      this.$refs.popover.doClose() // 关闭弹框
      this.$refs.dialog.reset() // 清空数据
    }

子组件:

子组件由一个单纯的表单组成

xml 复制代码
  <el-form :model="form" ref="form" size="small" :rules="rules">
    <el-form-item label="作业名称" prop="value" required>
      <el-input v-model="form.value"></el-input>
    </el-form-item>
    <el-form-item>
      <el-button type="primary" @click="save" style="float: right" >保存</el-button>
    </el-form-item>
  </el-form>

子组件的工作:

完成表单的校验和提交表单的数据

kotlin 复制代码
    save () {
      this.$refs.form.validate((valid) => {
        if (valid) {
          this.$emit('save', this.form)
        } else {
          return false
        }
      })
    },

抛出一个清空表单的方法,便于调用

kotlin 复制代码
    reset () {
      this.$refs.form.resetFields()
    }

完整的代码如下:

父组件:

xml 复制代码
<template>
  <div class="about" ref="box">
    <el-input v-model="inputValue" style="margin-bottom: 50px"></el-input>
    <el-popover placement="bottom" trigger="click" ref="popover">
      <dialog-comp @save="save" ref="dialog"></dialog-comp>
      <el-button slot="reference" type="primary" size="mini"
        >点击出现弹框</el-button
      >
    </el-popover>
  </div>
</template>
<script>
import DialogComp from '@/components/DialogComp.vue'
export default {
  components: {
    DialogComp
  },
  data () {
    return {
      inputValue: ''
    }
  },
  methods: {
    save (v) {
      console.log(v)
      this.inputValue = v.value
      this.$refs.popover.doClose() // 关闭弹框
      this.$refs.dialog.reset() // 清空数据
    }
  }
}
</script>
<style scoped>
.about {
  width: 500px;
  margin: auto;
}
</style>
​

子组件:

xml 复制代码
<!--  -->
<template>
  <el-form :model="form" ref="form" size="small" :rules="rules">
    <el-form-item label="作业名称" prop="value" required>
      <el-input v-model="form.value"></el-input>
    </el-form-item>
    <el-form-item>
      <el-button type="primary" @click="save" style="float: right"
        >保存</el-button
      >
    </el-form-item>
  </el-form>
</template>
​
<script>
export default {
  data () {
    return {
      form: {
        value: ''
      },
      rules: {
        vaule: {
          required: true,
          message: '必填',
          trigger: blur
        }
      }
    }
  },
  methods: {
    save () {
      this.$refs.form.validate((valid) => {
        if (valid) {
          this.$emit('save', this.form)
        } else {
          return false
        }
      })
    },
    reset () {
      this.$refs.form.resetFields()
    }
  }
}
</script>
​
相关推荐
噢,我明白了1 小时前
表单的完整 CRUD 练习【极简个人记账本】(含前端后端链接mySQL)
java·前端·数据库·mysql
幽络源小助理1 小时前
MacCMSPro版视频影视系统源码_全开源高可用视频平台解决方案
前端·php·php源码
不会敲代码17 小时前
手写 Zustand:三十分钟带你搞懂状态管理库的核心原理
前端·javascript·源码
神奇的程序员8 小时前
重构了自己5年前写的截图插件
前端·javascript·架构
橙淮8 小时前
从优化到安全再到未来 ——JavaScript 全维度技术指南
javascript
UXbot9 小时前
一人独立交付 UI + 前端:AI 驱动 UI 设计工具的五大功能模块深度评测
前端·低代码·ui·设计模式·交互
kobesdu9 小时前
【ROS2实战笔记-19】ROS2 生命周期节点的启动顺序、状态转换陷阱与热备方案
java·前端·笔记·机器人·ros·ros2
诚实可靠王大锤9 小时前
React Native 输入框与按钮焦点冲突解决方案(rn版本0.70.3)
前端·javascript·react native·react.js
kyriewen10 小时前
测试妹子让我写单测,我偷偷用AI一天干完一周的活
前端·chatgpt·cursor
2601_9577808410 小时前
Claude Code 2026年最新部署指南:从环境搭建到技能扩展
前端·人工智能·ai编程·claude