我有两个vue组件:
Vue.component('event', {
props:['event'],
template: `
<span class="pointer" @click="showModal = true">
{{event.evname}}
<modal @hide='hideModal' :event="event" :showModal="showModal">
<div slot="title">{{event.evname}}</div>
<div slot="content">{{event}}</div>
</modal>
</span>`,
data: function(){
return{
showModal: false
}
},
methods: {
hideModal: function(){
this.showModal = false
}
}
})
和
Vue.component('modal', {
props:['event', 'showModal'],
template: `
<div v-if="showModal" class="modalBack">
<div class="container modalPopup">
<div class="row">
<span class="col-lg-11"><slot name="title"></slot></span><span class="pointer col-lg-1" @click="hide">X</span>
<slot name="content"></slot>
</div>
</div>
</div>`,
methods: {
hide: function(){
this.$emit('hide')
}
}
})
当我点击事件名称时,模态显示正常,但是,当我尝试通过单击模态上的“X”来关闭事件时,它会发出“隐藏”并且事件下的hideModal方法正在运行,但我的模态是熬夜 . 当我在尝试关闭它后控制日志'this.showModal'时,它显示为false,但是如果我在console.log'this'并查看showModal,我看它仍然等于true .
知道会发生什么吗?想法是showModal将被设置为false,它将被传递给模态组件,并且模态组件将关闭 .
1 回答
这里你的问题是模态嵌入在
span
里面,它有点击处理程序设置showModel = true
. 因此,当您单击X关闭模态时,您也可以单击 Span .showModal
设置为false,然后立即设置回true .要修复它,将模态移动到 Span 之外 .