【发布时间】:2019-07-17 14:38:10
【问题描述】:
我正在构建一个类似“Trello”的应用程序,其中我有板、列表和卡片,并且数据被保存到 Firebase 中的实时数据库中以供测试。
我正在使用 Bootstrap Vue 的 modals 来切换可见性。但是,我遇到了一个问题......
首先,我的 <b-modal> 在 Bootstrap 卡中,该卡有一个 v-for,它从板上的列表列表中获取卡列表。我想在模式中单击后显示卡片的数据,如果我单击另一张卡片,它将使用相同的 <b-modal> 元素但显示不同的数据。
通过我的实现,我似乎导致了 Maximum call stack size exceeded 并且实际上它错误 5,000 多次使浏览器崩溃,看起来不太好:D
我已经进行了一些调试,并尝试使用带有return false; 的方法来找出实际发生的情况,并且模态显示,但是当解除模态时,模态再次直接弹出,从而导致错误。
下面,我附上相关代码和JS:
HTML 标记
<b-col md="4" v-for="(list, index) in board.lists" :key="list.id">
<b-card bg-variant="light" header-tag="header" footer-tag="footer">
<div slot="header" class="mb-0">
<b-row>
<b-col md="8">
<h4 class="mb-0"><b-form-input size="sm" class="mr-sm-2 input-is-editable" type="text" placeholder="Enter list name..." v-model="list.name" /></h4>
</b-col>
</b-row>
</div>
<b-card class="mb-3" v-for="(card, index) in list.cards" :key="card.id" v-b-modal.prevent="modalId(index)">{{ card.name }}
<b-modal :id="'modal' + index" hide-footer title="Using Component Methods">
<div class="d-block text-center">
<h3>{{ card.name }}</h3>
</div>
<b-button class="mt-3" variant="outline-danger" block>Close Me</b-button>
</b-modal>
</b-card>
<div slot="footer" class="mb-0">
<b-row>
<b-col>
<b-nav-form>
<b-form-input size="sm" class="mr-sm-2" type="text" placeholder="Enter card name..." v-model="cardname" />
<b-button size="sm" variant="success" class="my-2 my-sm-0" type="button" @click="addCard(index)" :disabled="!cardname">Add card</b-button>
</b-nav-form>
</b-col>
</b-row>
</div>
</b-card>
</b-col>
JS
export default {
data () {
return {
id: this.$route.params.id,
board: [],
cards: [],
lists: [],
listname: '',
cardname: '',
editedFields: {}
}
},
created() {
this.$http.get('myfirebaseurl/boards/' + this.id + '.json').then(response => {
this.board = response.body
}, response => {
// handle error for fetching property data.
});
},
methods: {
modalId(index) {
return 'modal' + index;
}
}
}
JS 还有更多内容,但我只附上与上述标记相关的内容。
关于我做错了什么以及如何解决的任何建议?
非常感谢!
【问题讨论】:
-
您可能不应该在 v-for 中使用模态。如果你把它放在你的 html 的顶部,你可以在 v-for 中有一个 @click 事件,它将所需的数据传递给模式并打开它。
标签: firebase vue.js nuxt.js bootstrap-vue