如何使用vuejs2自行关闭对话框?

如何使用vuejs2自行关闭对话框?,vuejs2,Vuejs2,我正在写一个对话框组件,我不知道如何自己关闭对话框 <template> <div class="dialog" v-show="visible"> ... <button @click="close">Close</button> </div> </template> <script> { props: {visible: {type: Boolean, default: f

我正在写一个对话框组件,我不知道如何自己关闭对话框

<template>
  <div class="dialog" v-show="visible">
    ...
    <button @click="close">Close</button>
  </div>
</template>
<script>
  {
    props: {visible: {type: Boolean, default: false}},
    methods: {
      close () {
        // this.visible = false //It will get vue warn
      }
    }
  }
</script>

在vuejs中,子组件不能直接修改父属性

您可以为此使用事件/事件侦听器。但是因为你的例子很简单,你不需要一个事件

演示:

相反,您可以将组件可见的道具作为
:visisble=“visible”
传递,并将状态更改为:

watch: {
  visible (val) {
    if(!val) {
        // close
    }else{
        open
    }
  }
}

现在,如果父组件将
visisble
切换为false,则您的模式将不可见。

在vuejs中,子组件无法直接修改parents属性

您可以为此使用事件/事件侦听器。但是因为你的例子很简单,你不需要一个事件

演示:

相反,您可以将组件可见的道具作为
:visisble=“visible”
传递,并将状态更改为:

watch: {
  visible (val) {
    if(!val) {
        // close
    }else{
        open
    }
  }
}
现在,如果父级将
visisble
切换为false,您的模态将不可见。

道具是

您不应在子组件中更改从父组件接收的道具

因此,发出一个命令以在父组件本身中变异道具

<template>
  <div class="dialog" v-show="visible">
    ...
    <button @click="close">Close</button>
  </div>
</template>
<script>
  {
    props: {visible: {type: Boolean, default: false}},
    methods: {
      close () {
        // this.visible = false //It will get vue warn
        this.$emit('close-dialog')
      }
    }
  }
</script> 

...
接近
{
属性:{visible:{type:Boolean,默认值:false},
方法:{
结束(){
//this.visible=false//它将获得vue警告
此.$emit('关闭对话框')
}
}
}
父组件

<template>
    <div>
    <my-dialozg @close-dialog="visible = false" :visible="visible"><my-dialog>
    </div>
</template>

在对话框组件上设置事件侦听器
关闭对话框
,并将作为道具传递的数据属性
可见
设置为
false
。您可以按上图所示进行内联操作,也可以将其提取到方法中

您不应在子组件中更改从父组件接收的道具

因此,发出一个命令以在父组件本身中变异道具

<template>
  <div class="dialog" v-show="visible">
    ...
    <button @click="close">Close</button>
  </div>
</template>
<script>
  {
    props: {visible: {type: Boolean, default: false}},
    methods: {
      close () {
        // this.visible = false //It will get vue warn
        this.$emit('close-dialog')
      }
    }
  }
</script> 

...
接近
{
props:{visible:{type:Boolean,default:false},
方法:{
结束(){
//this.visible=false//它将获得vue警告
此.$emit('关闭对话框')
}
}
}
父组件

<template>
    <div>
    <my-dialozg @close-dialog="visible = false" :visible="visible"><my-dialog>
    </div>
</template>


在对话框组件上设置事件侦听器
关闭对话框
,并将作为道具传递的数据属性
可见
设置为
false
。您可以按上面所示进行内联操作,也可以将其提取到方法中。谢谢,
。sync
是我想要的。谢谢,
。sync
是我想要的。