【问题标题】:Parent listen to child emit event in Vuejs父母在 Vuejs 中监听孩子发出事件
【发布时间】:2019-11-21 18:54:20
【问题描述】:

有没有办法让父组件监听其子组件发出的自定义事件?

// -- 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();
    });
  }
});

试过

this.$root.$on('add-task',function(){
  alert();
});

this.$parent.$on('add-task',function(){
  alert();
});

但不幸的是,两部作品都没有。我该怎么做?

【问题讨论】:

    标签: vue.js vuejs2


    【解决方案1】:

    在你的父组件中,只需添加listen @add-task

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

    然后它可以监听从孩子发出的事件

      this.$emit('add-task',this.taskname);
    

    【讨论】:

    • 有没有办法在父组件的创建实例上创建监听子事件?
    • 你不需要为创建的钩子添加监听器,@add-task 就足够了。或者你可以使用 EventBus medium.com/easyread/…
    • 我明白了,谢谢,一会儿会接受你的回答
    猜你喜欢
    • 2018-05-19
    • 2016-10-07
    • 2020-04-28
    • 1970-01-01
    • 2018-10-21
    • 2017-03-22
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    相关资源
    最近更新 更多