我正在创建一个data table with Vuetify以显示记录列表,其中每个记录都有要下载的文件列表。然后,我为每个表行创建一个按钮,当单击该按钮时,它应显示一个modal及其文件列表。
该列表称为tableRows
,其中包含多个对象。我在下面提供一个示例。
脚本
export default {
data () {
return {
tableRows: [
{
'properties': {
'date': '2015-12-19',
'title': 'LC82200632015353LGN01',
'type': 'IMAGES',
'showDownloadDialog': false
},
'provider': 'DEVELOPMENT_SEED'
},
...
],
showDownloadDialog: false // example
}
}
}
该表构建良好,但是我无法为每个表行使用模式。
该网站上的modal example运行良好,我只使用一个变量(即dialog
),并且只想显示一个模态,但是对于我来说,我有一个对象列表,其中每个对象都可以打开特定的模态。
我尝试将showDownloadDialog
属性放在列表中的每个对象中,并使用v-model
绑定它(v-model ='props.item.properties.showDownloadDialog'),但没有有用。模态无法打开。
模板
<v-data-table :items='tableRows' item-key='properties.title'>
<template v-slot:items='props'>
<tr class='tr-or-td-style-border-right'>
<td class='text-xs-left th-style-height'>
<div class='text-xs-center'>
...
<!-- Download button -->
<br>
title: {{ props.item.properties.title }}
<br>
showDownloadDialog: {{ props.item.properties.showDownloadDialog }}
<br>
<v-btn @click.stop='props.item.properties.showDownloadDialog = true' title='Show download list'>
<i class='fas fa-download'></i>
</v-btn>
<v-dialog v-model='props.item.properties.showDownloadDialog' persistent scrollable max-width="600">
<v-card>
...
<v-card-actions>
<v-btn @click='props.item.properties.showDownloadDialog = false'>
Close
</v-btn>
</v-card-actions>
</v-card>
</v-dialog>
</div>
</td>
</tr>
</template>
</v-data-table>
我尝试在页面上打印属性props.item.properties.showDownloadDialog
,并且当我单击按钮时它不会更改。我相信这个属性不是被动的,因此,它的状态不会改变,但是我不明白为什么它不是被动的。数据表中的props
似乎是副本,而不是我的列表tableRows
中一条记录的引用。
示例
我已经尝试在data ()
中添加一个名为showDownloadDialog
的简单标志,而不是使用props.item.properties.showDownloadDialog
,它可以工作,但是会显示全部不幸的是,这些模式同时出现,而不仅仅是与该记录相关的特定模式。
有人会知道会发生什么吗?
谢谢。
答案 0 :(得分:0)
我可以使用Subash的帮助解决问题。我在下面的代码中给出。
首先,我在data ()
中插入了一个新属性。我将使用此属性显示/关闭模态并提供信息以填充它。
downloadDialog: {
show: false
}
在内部数据表中,我只是按了按钮,然后创建了一个名为showDownloadDialog
的方法,在其中我传递了properties
对象(即信息所在的位置)。
<v-btn flat icon color='black' class='v-btn-style'
@click='showDownloadDialog(props.item.properties)' title='Show download list'>
<i class='fas fa-download'></i>
</v-btn>
在外部数据表中,我添加了v-dialog
并将其与downloadDialog
绑定。
除此之外,我还创建了一种关闭对话框的方法。
<v-dialog v-model='downloadDialog.show' persistent scrollable max-width="600">
<v-card>
...
<v-card-actions>
<v-btn @click='closeDownloadDialog()'>
Close
</v-btn>
</v-card-actions>
</v-card>
</v-dialog>
在showDownloadDialog
内,我将'properties'合并到'downloadDialog'中,然后打开模式,而closeDownloadDialog
我只是关闭了模式。
showDownloadDialog (properties) {
// merge 'properties' into 'downloadDialog'
Object.assign(this.downloadDialog, properties)
this.downloadDialog.show = true
},
closeDownloadDialog () {
this.downloadDialog.show = false
}
非常感谢Subash的帮助。