vue 对话框没有 close/hide

vue dialog doesn't close/hide

我无法关闭或隐藏我的 vue-dialog,我不知道为什么。这是我调用对话框的 js 文件:

<ItemChooserDialog v-model="showItemChooser" @onItemSelected="onStockSelected" />

export default {
    data() {
        return {
            showItemChooser: false,
        }
    }),
    methods: {
      chooseItem(context) {
        var self = this;
        self.showItemChooser = true;
      },
      onStockSelected(result) {
        var self = this;

        let id = result.id;
        let name = result.name;
        self.showItemChooser = false;
      },
   }

这是我的对话:

<template>
    <v-dialog v-model="show" max-width="600">
      ...
    </v-dialog>
</template>

computed: {
   show: {
      get () {
        return this.value
      },
      set (value) {
         this.$emit('input', value)
      }
   }
},
props: {
    value: Boolean
},
methods: {
   rowClick{
     this.$emit('onItemSelected', clicked_item);
   }
}

如果我在对话框中选择一个项目,js 文件的回调方法“onStockSelected”运行并且 self.showItemChooser 设置为 false 但对话框仍然可见。

您没有任何实际隐藏对话框的代码。有条件地 hide/show 元素的最常见方法是使用 v-if directive.

在您的对话框元素上:

<template>
    <v-dialog v-if="value" v-model="show" max-width="600">
      ...
    </v-dialog>
</template>

检查我制作的这个codesandbox:https://codesandbox.io/s/stack-70146776-6tczf?file=/src/components/ItemChooserDialog.vue

我看你可能拿我之前的一个回答举例了。在这种情况下,因为您正在使用自定义对话框组件的属性 value 来处理 v-dialog v-model。您可以通过两种方式关闭对话框。

  1. 通过将 showItemChooser 设置为 false 从父组件关闭对话框。正如您在示例中所做的那样。我认为它不起作用,因为您在子组件中声明了没有括号的 rowClick 方法。

另外,在我的示例中,我决定在我的事件名称中使用 kebab-case,但这只是 eslint 的约定。其他一切看起来都很好。

      onStockSelected(result) {
        var self = this;
        let id = result.id;
        let name = result.name;
        self.showItemChooser = false;
      },
  1. 正在从子组件关闭对话框。由于您在 v-dialog 的 v-model 上使用计算机 属性 show。您只需将显示值设置为 false 即可关闭对话框。
    closeFromChild() {
      this.show = false
    }

最后但同样重要的是,如果您在对话框外单击,v-dialog 默认情况下会自行关闭。如果你想避免这个功能,你可以像我在我的例子中所做的那样为你的对话框设置 persistent 属性。