Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Vuejs中从子级侦听到父级的事件_Javascript_Vue.js_Vuejs2_Frontend - Fatal编程技术网

Javascript 在Vuejs中从子级侦听到父级的事件

Javascript 在Vuejs中从子级侦听到父级的事件,javascript,vue.js,vuejs2,frontend,Javascript,Vue.js,Vuejs2,Frontend,我想将一个事件从一个子组件发送到其父组件,这将改变视图 我可以创建事件并发出它,但是我的模板似乎没有注册它,我使用的是单文件组件(SFC)。另外,如果我手动更新数据对象,一切都可以正常工作 App.vue(父级) 导出默认值{ 名称:“应用程序”, 数据(){ 返回{ 当前视图:“模态” } }, 方法:{ 更新视图(视图){ console.log('事件侦听器!!!') this.currentView=视图; } } } Modal.vue(子级) {{title}} {{body}

我想将一个事件从一个子组件发送到其父组件,这将改变视图

我可以创建事件并发出它,但是我的模板似乎没有注册它,我使用的是单文件组件(SFC)。另外,如果我手动更新数据对象,一切都可以正常工作

App.vue(父级)


导出默认值{
名称:“应用程序”,
数据(){
返回{
当前视图:“模态”
}
},
方法:{
更新视图(视图){
console.log('事件侦听器!!!')
this.currentView=视图;
}
}
}
Modal.vue(子级)


{{title}}
{{body}}

更多信息 我同意

导出默认值{ 名称:'模态', 数据(){ 返回{ 秀:没错, 标题:“你好” } }, 方法:{ 完全同意{ this.show=false; } } }

请帮助:)

您需要在
本身上注册事件侦听器;组件事件不冒泡()



App.vue中是否有可用的组件,即注册为全局组件?否则它必须注册为本地组件在main.JS中,是否有一种方法可以通过JS(方法)本身实现这一点,即创建事件和侦听?如果您有对组件的引用(通过),则可以使用添加侦听器,请参阅。
<template>
    <div v-on:change-view="updateView">
        <!-- render the currently active component/page here -->
        <component v-bind:is="currentView"></component>
    </div>
</template>
<script>
export default {
  name : 'app',
  data () {
      return {
          currentView : 'Modal'
      }
  },
  methods : {
      updateView (view) {
          console.log('event listener!!!')
          this.currentView = view;
      }
  }
}
</script>
<template>
    <div> 
        <vk-modal v-bind:show="show">
            <h1>{{ title }}</h1>
            <p>{{ body }}</p>
            <p class="uk-text-right">
                <vk-button v-on:click="$emit('change-view', 'Purposes')">More Information</vk-button>
                <vk-button v-on:click="fullConsent" type="primary">I Agree</vk-button>
            </p>
        </vk-modal> 
    </div>
</template>
<script>
export default {
  name : 'modal',
  data () {
      return {
          show : true,
          title : 'Hello'
      }
  },
  methods : {
        fullConsent () {
            this.show = false;
        }
  }
}
</script>