使用iview如何双向绑定弹窗?

发布于 2022-09-06 00:01:27 字数 1418 浏览 16 评论 0

父组件

<li @click="logClick">登录</li>
<Modal :modalValue="modalValue" @on-close="closeDialog()"></Modal>


// script

data () {
    return {
        modalValue: false,
    }
},
methods: {
    logClick() {
      this.modalValue = true
    },
    closeDialog(attr) {
      this.modalValue = false
    },
}

子组件

<template>
<div>
  <Button type="primary">
    显示对话框
  </Button>
  <Modal v-model="modalValue" @on-ok="ok" @on-cancel="cancel">
    
  </Modal>
  </div>
</template>
<script>
export default {
  props: {
    modalValue: {
      type: Boolean,
      default: false
    }
  },
  data() {
    return {
      
    }
  },
  methods: {
    ok(modalValue) {
      this.$emit('on-close', modalValue);
    },
    cancel(modalValue) {
      this.$emit('on-close', modalValue);
    }
  }
}
</script>

弄了一下午到现在,可以点击打开关闭,但是提示warning双向绑定问题
Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead, use a data or computed property based on the prop's value. Prop being mutated: "modalValue"

思路: 点击登录 -> 传入modalV=true给子组件 -> 子组件显示 -> 点击关闭 -> 传出关闭事件 -> 父组件通过关闭事件将modalV=false

测试: 如果data里创建MV: this.modalValuev-model绑定上去,那么点击连窗口都不会弹出了。。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

鲜血染红嫁衣 2022-09-13 00:01:27

改成v-bind:value="modalValue"
不用v-model绑定

为人所爱 2022-09-13 00:01:27

# 2个方法

第一个 :

// 父组件
<dialog-apply :visible.sync="dialogApplyVisible" />

// 子组件
<el-dialog
      :visible.sync="visible"
      title="申请"
      :before-close="onClose"
>

onClose() {
  this.$emit('update:visible', false)
}

第二个 :

// 父组件
<dialog-apply :visible.sync="dialogApplyVisible" @close='dialogApplyVisible = false' />

// 子组件
<el-dialog
      :visible.sync="visible"
      title="申请"
      :before-close="onClose"
>

onClose() {
  this.$emit('close')
}

这2个方法 ,:before-close 是关键 ;

×眷恋的温暖 2022-09-13 00:01:27

手动点赞图片描述

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文