Vue.js Vuejs中的父侦听子发射事件

Vue.js Vuejs中的父侦听子发射事件,vue.js,vuejs2,Vue.js,Vuejs2,父组件是否有办法侦听其子组件emmited自定义事件 // -- child comp const addnewbtn = { template : '<div><button v-on:click="showform">Add New Task</button><form v-show="form" v-on:submit.prevent="addnewtask"><input type="text" v-model="taskn

父组件是否有办法侦听其子组件emmited自定义事件

// -- child comp
const addnewbtn  = {
    template : '<div><button v-on:click="showform">Add New Task</button><form v-show="form" v-on:submit.prevent="addnewtask"><input type="text" v-model="taskname" /><button>Add</button></form></div>',
  data(){
    return {
        taskname : '',
      form : false
    }
  },
  methods : {
    showform(){
        if( this.form ){
        this.form = false;
      }else{
        this.form = true;
      }
    },
    addnewtask(){
      this.$emit('add-task',this.taskname);
    }
  },
}

// -- parent comp
Vue.component('todolist',{
    components : { addnewbtn },
    data(){
    return {
        todoitems : [
        { name : 'Task 1', checked : false },
        { name : 'Task 2', checked : false },
        { name : 'Task 3', checked : false },
      ]
    }
  },
  methods : {
    makeitdone(item){
        if( this.todoitems[item].checked ){
        this.todoitems[item].checked = false;
      }else{
        this.todoitems[item].checked = true;
      }
    },
    removeitem(item){
        this.todoitems.splice(item,1);
    },
    addtask(){
        alert();
    }
  },
  created(){
    this.$root.$on('add-task',function(){
        alert();
    });
  }
});


但不幸的是,这两种方法都不适用。如何执行此操作?

在父组件中,只需添加listen
@addtask

<addnewbtn @add-task="addtask" />

有没有办法在父组件的已创建实例上发出侦听子事件?您不需要将侦听器添加到已创建的挂钩中,
@addtask
就足够了。或者你可以使用EventBus,我知道了,谢谢,我马上就接受你的回答
this.$parent.$on('add-task',function(){
  alert();
});
<addnewbtn @add-task="addtask" />
  this.$emit('add-task',this.taskname);