【发布时间】:2020-03-30 08:46:04
【问题描述】:
我有一个复杂的模态,我已将其放入它自己的组件中。它适用于传递模型的副本,以允许用户取消操作。
<template>
<b-modal
v-if="itemCopy"
v-model="shown"
@cancel="$emit('input', null)"
@ok="$emit('input', itemCopy)"
>
<!-- content -->
</b-modal>
</template>
<script>
export default {
props: {
value: Object
},
data() {
return {
shown: false,
itemCopy: null
};
},
watch: {
value(itemToDisplay) {
this.shown = !!itemToDisplay;
this.initValue();
},
item(it) {
this.initValue();
}
},
methods: {
initValue() {
this.itemCopy = _.cloneDeep(this.value);
}
}
};
</script>
与之通信的想法是在 v-model 中传递一个对象,如果设置,模态将使用该数据显示,完成后,新状态将通过 v-model 传回好吧。
也就是说,如果用户取消/关闭了modal,则v-modal变量将为null,否则它将是一个新的Model,将替换v-modal中的那个。
<template>
<!-- omitted for brevity -->
<ItemModal v-model="modalItem" />
<template>
<script>
//...
export default {
data() {
return {
itemNumber: null
};
},
computed: {
modalItem:{
get() {
if (this.itemNumber != null) return this.entries[this.itemNumber];
},
set(newItem) {
if (newItem && this.itemNumber) {
//splice, etc.
}
// in any clase reset the selection to close the modal
this.itemNumber = null;
}
},
//...
<script>
我遇到的问题是来自b-modal 的事件。我可以使用@ok,但没有@notOk。
例如@cancel 不会在用户点击模态框外被抛出。
如何做到这一点?还有其他更简单的方法吗?
【问题讨论】:
标签: vue.js bootstrap-vue