我在 Vue 中实现动态模态组件时遇到问题。
我用来显示从数据库中获取的一组数据的常用方法是,我通过遍历数据库结果的每一行来转储 HTML 表格元素中的每一行。是这样的:
正如您在屏幕截图中看到的,每一行都有一个或多个由循环动态生成的按钮。为了将模态组件绑定到每个按钮(比如本场景中的删除按钮),我做了这样的事情。
HTML:
<div id="app">
<?php foreach($result as $x): ?>
<modal v-if="showModal">I am Modal $x</modal>
<btn @trigger="onShowModal">Button $x</btn>
<?php endforeach; ?>
</div>
因此,如果我的结果中有三行,上述代码块将采用如下形式:
<div id="app">
<modal v-if="showModal">I am Modal 1</modal>
<btn @trigger="onShowModal">Button 1</btn>
<modal v-if="showModal">I am Modal 2</modal>
<btn @trigger="onShowModal">Button 2</btn>
<modal v-if="showModal">I am Modal 3</modal>
<btn @trigger="onShowModal">Button 3</btn>
</div>
这是我在 JavaScript 端所做的:
脚本:
Vue.component('btn',{
template: `<button @click="$emit('trigger')"><slot></slot></button>`,
});
Vue.component('modal',{
template: `<p><slot></slot></p>`,
});
new Vue({
el: '#app',
data: {
showModal: false
},
methods: {
onShowModal(){
this.showModal = true;
}
}
});
这种方法的问题是,当我单击任何一个“删除”按钮时,我得到的是模态“堆栈”而不是我想查看的模态。那是因为我将 showModal
设置为 true
如果你看到填充的 HTML 块,你会看到每个模态都设置为 v-if="showModal"
随着我开始了解前端-后端关系,我了解到这种模式在应用程序中出现得越来越频繁。我该如何解决这个问题(对 vue 初学者非常友好)?
原文由 Tanmay 发布,翻译遵循 CC BY-SA 4.0 许可协议
根本问题是您在所有模态组件上引用相同的数据属性
showModal
。您可以制作另一个组件来封装按钮和模态组件对。这样,每个
modal
和btn
对都有一个单独的showModal
数据属性: