首页前端开发其他前端知识如何用$emit方法实现子父组件通信

如何用$emit方法实现子父组件通信

时间2024-03-25 00:30:03发布访客分类其他前端知识浏览756
导读:这篇文章给大家分享的是“如何用$emit方法实现子父组件通信”,文中的讲解内容简单清晰,对大家学习和理解有一定的参考价值和帮助,有这方面学习需要的朋友,接下来就跟随小编一起学习一下“如何用$emit方法实现子父组件通信”吧。 Vu...
这篇文章给大家分享的是“如何用$emit方法实现子父组件通信”,文中的讲解内容简单清晰,对大家学习和理解有一定的参考价值和帮助,有这方面学习需要的朋友,接下来就跟随小编一起学习一下“如何用$emit方法实现子父组件通信”吧。

Vue可以通过props属性,将参数从父组件传递给子组件,相对而言是比较简单的。

如果是想从子组件传递参数到父组件的话,得借助父组件的方法,同时在子组件中通过$emit来调用父组件中的方法实现。

接下来具体演示下。

场景

同样情况,父组件是新闻列表组件,子组件是新闻内容组件。在子组件中点击删除按钮,可以将删除的新闻信息传递给父组件,从而实现新闻列表的更新。

父组件开发

父组件用来显示新闻列表,代码如下:

template>
    
  div>
    
    template v-for="item in list">
    
      NewsContent :news="item" @removeNews="removeNews">
    /NewsContent>
    
    /template>
    
  /div>
    
/template>
    
script>
    
import NewsContent from '@/components/NewsContent.vue';

export default {

  name: "MyCounter",
  data() {

    return {

      list: [
        {

          title: "今天天气不错",
          author: "张三"
        }
,
        {

          title: "今天下雨了",
          author: "李四"
        }

      ]
    }

  }
,
  components: {

    NewsContent
  }
,
  methods: {

    removeNews(news) {
    
      for (let i = 0;
     i  this.list.length;
 i++) {
    
        if (this.list[i].title == news.title &
    &
 this.list[i].author == news.author) {
    
          this.list.splice(i, 1);
    
          break;

        }

      }

    }

  }

}
    
/script>
    
登录后复制

有几个需要注意的点:

  • 在父组件中注册了子组件NewsContent

  • 在父组件中定义了删除新闻的方法,当传递的新闻标题与作者均匹配时,则从新闻列表list中删除对应的新闻。

  • 通过:news="item",将父组件的参数传递给子组件。

  • 通过@removeNews="removeNews",将父组件的方法传递给子组件,注意子组件就是通过该方法来调用父组件方法并传参的。

子组件开发

子组件通过$emit调用父组件传递过来的removeNews方法,代码如下:

template>
    
  div>
    
    p>

      新闻标题:{
{
news.title}
}
--新闻作者:{
{
news.author}
}
    
      button @click="btnDelete(news)">
    删除/button>
    
    /p>
    
  /div>
    
/template>
    
script>

export default {

  name: "MyCounter",
  props: ['news'],
  mounted() {
    
    console.log(this.news);

  }
,
  methods: {

    btnDelete(news) {
    
      this.$emit("removeNews", news);
     
    }

  }

}
    
/script>
    
登录后复制

注意,当点击新闻后面的删除按钮时,触发btnDelete方法,而btnDelete方法内容为this.$emit("removeNews", news); ,即调用了父组件的removeNews方法,且传递参数news。

所以点击子组件删除按钮后,父组件中对应的新闻被删除。

子组件调用父组件的方法,来实现子父组件通信。父组件需要先将方法传递给子组件,子组件在通过$emit调用传递的方法,并不算很复杂。

1.props$attrs具有数据的单向性,只能由父组件向子组件传递数据,不具备子传父的功能。

2.在vue中,我们可以使用自定义事件实现子组件向父组件传递数据。

自定义事件

1.在子组件上使用v-on指令绑定自定义事件

getChildData(data){

	//data是子组件触发事件传递的参数
	console.log('child data is' +data)
}
    
child-c v-on:get-child-data='getChildData'>
    /child-c>
    
登录后复制

2.事件的名称推荐使用-分割

$emit触发事件

1.每一个组件实例都要$emit方法用来触发自定义事件。

2.$emit(fn,arg)接受两个参数

(1)第一个参数是触发的事件名称,注意必须和定义的事件名完全相同。

(2)第二个参数是向父组件传递的数据。在父组件中就是定义的事件函数的第一个参数。

this.$emit('get-child-data','hello father')

现在大家对于如何用$emit方法实现子父组件通信的内容应该都清楚了吧,希望大家阅读完这篇文章能有所收获。最后,想要了解更多如何用$emit方法实现子父组件通信的知识,欢迎关注网络,网络将为大家推送更多相关知识的文章。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: 如何用$emit方法实现子父组件通信
本文地址: https://pptw.com/jishu/652420.html
重定向与别名怎样设置,操作是什么 PHP中exec函数执行返回结果是什么

游客 回复需填写必要信息