首页 文章

Vue组件不更新函数数据

提问于
浏览
1

我有两个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 回答

  • 1

    这里你的问题是模态嵌入在 span 里面,它有点击处理程序设置 showModel = true . 因此,当您单击X关闭模态时,您也可以单击 Span . showModal 设置为false,然后立即设置回true .

    要修复它,将模态移动到 Span 之外 .

    template: `
      <div>
        <span class="pointer" @click="showModal = true">
            {{event.evname}}
        </span>
        <modal @hide='hideModal' :event="event" :showModal="showModal">
           <div slot="title">{{event.evname}}</div>
           <div slot="content">{{event}}</div>
        </modal>
      </div>
    `,
    

相关问题