ElementUI_Plus+Vue3:将element Dialog作为组件,实现点击登陆按钮弹出登录界面思路记录

需求是点击登陆按钮实现弹出登陆界面,但是我想把登录Dialog作为一个组件在主界面调用。子组件与父组件之间的通信就出现了困难。
总结经验:
1.使用props从父组件向子组件传值。但是props是单向绑定,子组件中无法使用它改变父组件中的值。详见官方文档props单向数据流
2.使用this.$emit()在子组件中改变父组件中logvisible的值。
精简版代码:

父组件代码:
<template>
     <el-button type="text" @click="showLogdialog()" >登录</el-button>
     <Logdialog :dialogflag.="logvisible" @closedia = "closedia"></Logdialog>
</template>
<script>
 import Logdialog from "../components/Logdialog"; //导入组件
 export default {
        name: 'Home',
        components: { Logdialog},
        data() {
          return 
           {
             logvisible: false,  //Boolean 用于dialog隐藏/显示
           }},
        methods: {
           showLogdialog(value)  //点击按钮,显示dialog
           {
             this.logvisible = true;
           },
          closedia(){
              this.logvisible = false;
          }
        }
    }
</script>
  1. 第二行中 :dialogflag.="logvisible",将父组件中的数据Boolean:logvisible绑定到子组件中的数据dialogflag,在子组件中,根据dialogflag:true/false 判断显示/隐藏。
  2. 第二行中 @closedia = "closedia"添加自定义事件,供子组件中this.$emit()调用,以在子组件中改变父组件中logvisible 的值。
子组件代码:
<template>
  <el-dialog
      title="用户登录与注册"
      v-model="dialogflag"   
      :close-on-click-modal="false"
      :before-close="logdialogclose"  关闭前的回调
      :destroy-on-close="true"
  >
  登陆界面表单内容
  </el-dialog>
</template>
<script>
export default {
  name: "Logdialog",
  props: {
    dialogflag: Boolean,
  },
  emits: ['closedia'],
  methods: {
    logdialogclose() {
      this.$emit('closedia')
    }
  }
}
</script>

  1. 通过 props{ }声明dialogflag是父组件中传过来的值,通过this.$emit('closedia')调用父组件中的方法,改变父组件中的logvisible的值。

参考文章:emit的使用

好的,基于Element Plus和Vue组合式编码方式实现点击登录按钮弹出滑块验证,需要在模板中添加一个登录按钮,然后使用ref函数定义一个dialogVisible的状态,用于控制弹出框的显示和隐藏。在弹出框中,使用组合式API实现滑块验证功能,验证通过后,关闭弹出框并执行登录操作。 组件代码如下: ```html <template> <div> <el-button type="primary" @click="dialogVisible = true">登录</el-button> <el-dialog v-model="dialogVisible" title="滑块验证" :close-on-click-modal="false"> <el-slider v-model="sliderValue" :disabled="isVerified" :show-input="false" :max="100"></el-slider> <el-button :disabled="isVerified" @click="verify">验证</el-button> <el-button @click="reset">重置</el-button> </el-dialog> </div> </template> <script> import { ref, toRefs } from '@vue/composition-api'; import { ElButton, ElDialog, ElSlider } from 'element-plus'; export default { components: { ElButton, ElDialog, ElSlider }, setup() { const dialogVisible = ref(false); const sliderValue = ref(0); const isVerified = ref(false); function verify() { if (sliderValue.value >= 80) { isVerified.value = true; alert('验证通过!'); dialogVisible.value = false; login(); } else { alert('请将滑块滑到最右侧!'); } } function reset() { sliderValue.value = 0; isVerified.value = false; } function login() { // 执行登录操作 } return { ...toRefs({ dialogVisible, sliderValue, isVerified }), verify, reset }; } }; </script> ``` 这样,就完成了基于Element Plus和Vue组合式编码方式实现点击登录按钮弹出滑块验证的代码。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小雅痞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值