javascript - Vue 组件不更新函数数据

标签 javascript vue.js vuejs2 vue-component

我有两个 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,但是如果我控制台日志“this”并查看 showModal,我发现它仍然等于 true。

知道会发生什么吗?这个想法是 showModal 将被设置为 false,这将被传递到模态组件,并且模态组件将关闭。

最佳答案

这里的问题是模式嵌入在具有设置 showModel = true 的点击处理程序的 span 中。因此,当您单击 X 关闭模式时,您单击了跨度。 showModal 设置为 false,然后立即 设置回 true。

要修复此问题,请将模态移到范围之外。

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>
`,

关于javascript - Vue 组件不更新函数数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44233822/

相关文章:

javascript - 更新vuejs 2.0后页面空白

javascript - 如何在vue js中显示评分值?

javascript - 使用 Vuex 将数据绑定(bind)到组件

javascript - 如何将 Jitsi Meet 添加到 Vuejs

javascript - Vue.js 中的循环变量与 AngularJS 类似

javascript - 为什么 Electron App 在 Windows 中无法加载 VueJS?

vue.js - 如何使该组件将其值传递给父组件?

javascript - 具有大型动态表单的主干js

javascript - 用户输入时进行单词替换 (JS)

javascript - 使用 Selenium 测试 jQuery 元素数据()?