Vue.js 几次打开对话框后应用最大调用堆栈错误
Vue.js app Maximum Call stack error after opening dialog few times
我的 Vue.js 应用程序有问题。我实现了数据 table,内容来自 API 调用。所以在安装应用程序后,我调用它 API 并用响应填充数组,然后在 table 中显示此数据。我想添加向每一行添加注释的可能性,因此我需要打开对话框并向其中解析 ID,以便能够将注释保存到该特定行。
我能够实现这个对话框,目前没有 ID,所以每一行都是相同的,当我点击保存时它只是关闭卡,但我遇到了我想在继续之前解决的问题。
所以问题是当我点击那个按钮打开对话框时,我可以看到背景非常模糊,如下图所示。
当我点击保存并再次打开这个对话框时,或者可能再打开两次,我收到这个错误并且页面没有响应,我需要打开新标签并转到相同的 link.
这是我的历史组件代码,其中包含每个按钮。
<v-data-table
:headers="headers"
:items="history"
:search="search"
class="elevation-1"
>
<template v-slot:item.recording>
<v-dialog v-model="dialog" max-width="400px">
<template v-slot:activator="{ on, attrs }">
<v-btn
icon
small
@click="dialog = true"
v-bind="attrs"
v-on="on"
>
<v-icon small> mdi-content-save</v-icon>
</v-btn>
</template>
<NoteToHistoryDialog :noteId="noteId" v-on:close-card="dialog = false" />
</v-dialog>
<v-btn icon small @click="downloadAttachment">
<v-icon small> mdi-download</v-icon>
</v-btn>
</template>
</v-data-table>
这是 NoteToHistoryDialog 组件代码。
<template>
<v-main>
<v-card>
<v-card-title class="primary white--text">{{ $t("Add Note") }}{{ noteId }}</v-card-title>
<v-form>
<v-text-field
color="primary"
label="Text"
class="pr-4 pl-4"
v-model="note"
>
</v-text-field>
</v-form>
<v-card-actions class="justify-end">
<v-btn depressed plain color="primary white--text" @click="$emit('close-card')">
{{ $t("Close") }}
<v-icon>mdi-close</v-icon>
</v-btn>
<v-btn depressed plain color="primary white--text" @click="addNote">
{{ $t("Save") }}
<v-icon>mdi-content-save</v-icon>
</v-btn>
</v-card-actions>
</v-card>
</v-main>
</template>
但这应该没问题。
这也是整个组件的图片。单击那个小磁盘后会触发对话框。
感谢任何想法。
我能够解决我的问题,我创建了新组件,从 Vuetify 文档复制并粘贴了整个 CRUD table 并逐行编辑了我个人需要的所有内容,现在我可以单击“添加注释” " 按钮多次,它会正常工作。
这是工作代码。
<v-data-table
:headers="headers"
:items="history"
sort-by="date"
class="elevation-1"
>
<template v-slot:top>
<v-dialog v-model="dialog" max-width="500px">
<v-card>
<v-card-title class="primary white--text">
<span class="text-h5">{{ $t("Add Note") }}</span>
</v-card-title>
<v-card-text>
<v-container>
<v-row>
<v-col cols="12" sm="12" md="12">
<v-form>
<v-textarea
color="primary"
label="Text poznámky"
v-model="editedItem.note"
auto-grow
clearable
>
</v-textarea>
</v-form>
</v-col>
</v-row>
</v-container>
</v-card-text>
<v-card-actions>
<v-spacer></v-spacer>
<v-btn color="primary" text @click="close">
Zrušiť
</v-btn>
<v-btn color="secondary" text @click="save">
Uložiť
</v-btn>
</v-card-actions>
</v-card>
</v-dialog>
<v-dialog v-model="dialogDelete" max-width="500px">
<v-card>
<v-card-title class="text-h5"
>Chcete stiahnuť nahrávku?</v-card-title
>
<v-card-actions>
<v-spacer></v-spacer>
<v-btn color="primary" text @click="closeDelete"
>Zrušiť</v-btn
>
<v-btn color="secondary" text @click="deleteItemConfirm"
>OK</v-btn
>
<v-spacer></v-spacer>
</v-card-actions>
</v-card>
</v-dialog>
</template>
<template v-slot:item.recording="{ item }">
<v-icon small class="mr-2" @click="addNote(item)">
mdi-content-save
</v-icon>
<v-icon small @click="downloadRecording(item)">
mdi-download
</v-icon>
</template>
</v-data-table>
我的 Vue.js 应用程序有问题。我实现了数据 table,内容来自 API 调用。所以在安装应用程序后,我调用它 API 并用响应填充数组,然后在 table 中显示此数据。我想添加向每一行添加注释的可能性,因此我需要打开对话框并向其中解析 ID,以便能够将注释保存到该特定行。 我能够实现这个对话框,目前没有 ID,所以每一行都是相同的,当我点击保存时它只是关闭卡,但我遇到了我想在继续之前解决的问题。
所以问题是当我点击那个按钮打开对话框时,我可以看到背景非常模糊,如下图所示。
当我点击保存并再次打开这个对话框时,或者可能再打开两次,我收到这个错误并且页面没有响应,我需要打开新标签并转到相同的 link.
这是我的历史组件代码,其中包含每个按钮。
<v-data-table
:headers="headers"
:items="history"
:search="search"
class="elevation-1"
>
<template v-slot:item.recording>
<v-dialog v-model="dialog" max-width="400px">
<template v-slot:activator="{ on, attrs }">
<v-btn
icon
small
@click="dialog = true"
v-bind="attrs"
v-on="on"
>
<v-icon small> mdi-content-save</v-icon>
</v-btn>
</template>
<NoteToHistoryDialog :noteId="noteId" v-on:close-card="dialog = false" />
</v-dialog>
<v-btn icon small @click="downloadAttachment">
<v-icon small> mdi-download</v-icon>
</v-btn>
</template>
</v-data-table>
这是 NoteToHistoryDialog 组件代码。
<template>
<v-main>
<v-card>
<v-card-title class="primary white--text">{{ $t("Add Note") }}{{ noteId }}</v-card-title>
<v-form>
<v-text-field
color="primary"
label="Text"
class="pr-4 pl-4"
v-model="note"
>
</v-text-field>
</v-form>
<v-card-actions class="justify-end">
<v-btn depressed plain color="primary white--text" @click="$emit('close-card')">
{{ $t("Close") }}
<v-icon>mdi-close</v-icon>
</v-btn>
<v-btn depressed plain color="primary white--text" @click="addNote">
{{ $t("Save") }}
<v-icon>mdi-content-save</v-icon>
</v-btn>
</v-card-actions>
</v-card>
</v-main>
</template>
但这应该没问题。
这也是整个组件的图片。单击那个小磁盘后会触发对话框。
感谢任何想法。
我能够解决我的问题,我创建了新组件,从 Vuetify 文档复制并粘贴了整个 CRUD table 并逐行编辑了我个人需要的所有内容,现在我可以单击“添加注释” " 按钮多次,它会正常工作。
这是工作代码。
<v-data-table
:headers="headers"
:items="history"
sort-by="date"
class="elevation-1"
>
<template v-slot:top>
<v-dialog v-model="dialog" max-width="500px">
<v-card>
<v-card-title class="primary white--text">
<span class="text-h5">{{ $t("Add Note") }}</span>
</v-card-title>
<v-card-text>
<v-container>
<v-row>
<v-col cols="12" sm="12" md="12">
<v-form>
<v-textarea
color="primary"
label="Text poznámky"
v-model="editedItem.note"
auto-grow
clearable
>
</v-textarea>
</v-form>
</v-col>
</v-row>
</v-container>
</v-card-text>
<v-card-actions>
<v-spacer></v-spacer>
<v-btn color="primary" text @click="close">
Zrušiť
</v-btn>
<v-btn color="secondary" text @click="save">
Uložiť
</v-btn>
</v-card-actions>
</v-card>
</v-dialog>
<v-dialog v-model="dialogDelete" max-width="500px">
<v-card>
<v-card-title class="text-h5"
>Chcete stiahnuť nahrávku?</v-card-title
>
<v-card-actions>
<v-spacer></v-spacer>
<v-btn color="primary" text @click="closeDelete"
>Zrušiť</v-btn
>
<v-btn color="secondary" text @click="deleteItemConfirm"
>OK</v-btn
>
<v-spacer></v-spacer>
</v-card-actions>
</v-card>
</v-dialog>
</template>
<template v-slot:item.recording="{ item }">
<v-icon small class="mr-2" @click="addNote(item)">
mdi-content-save
</v-icon>
<v-icon small @click="downloadRecording(item)">
mdi-download
</v-icon>
</template>
</v-data-table>