好的,让我们试着把它做好。我建议制作一个成熟的组件,并在父组件或其他包含中使用 v-model 来控制模态窗口的打开和关闭。
1) 我们需要在子组件的“props”中声明 prop - “value”。
<script>
export default {
name: 'Modal',
props: ["value"],
data() {
return {
modalOpen: true,
}
},
methods: {
modalToggle() {
this.modalOpen = !this.modalOpen
},
},
}
</script>
2) 替换您的“modalToggle”:
modalToggle() {
this.$emit('input', !this.value);
}
3) 在父组件或其他包含声明“modal=false”var 并在组件 v-model="modal" 和任何用于 modal var 的控制按钮上使用。
总结
<template>
<div v-if="value" class="modal">
<div class="body">
body
</div>
<div class="btn_cancel" @click="modalToggle">
<i class="icon icon-cancel" />
</div>
</div>
</template>
<script>
export default {
name: "Modal",
props: ["value"],
methods: {
modalToggle() {
this.$emit("input", !this.value);
}
}
};
</script>
示例:
Vue.component('modal', {
template: '<div v-if="value" class="modal"><div class="body">modal body</div><div class="btn_cancel" @click="modalToggle">close modal<i class="icon icon-cancel" /></div></div>',
props: ["value"],
methods: {
modalToggle() {
this.$emit('input', !this.value);
}
}
});
// create a new Vue instance and mount it to our div element above with the id of app
var vm = new Vue({
el: '#app',
data:() =>({
modal: false
}),
methods: {
openModal() {
this.modal = !this.modal;
}
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<div @click="openModal">Btn modal</div>
<modal v-model="modal"></modal>
</div>