Vue所有的通信方式(全)

举报
前端老实人 发表于 2021/12/19 16:45:47 2021/12/19
【摘要】 组件_通信 prop父组件传递数据给子组件时,可以通过特性传递。推荐使用这种方式进行父->子通信。 $emit子组件传递数据给父组件时,触发事件,从而抛出数据。推荐使用这种方式进行子->父通信。 v-model .sync $attrs祖先组件传递数据给子孙组件时,可以利用$attrs传递。demo或小型项目可以使用$attrs进行数据传递,中大型项目不推荐,数据流会变的难于理解。$att...

组件_通信

prop

父组件传递数据给子组件时,可以通过特性传递。

推荐使用这种方式进行父->子通信。

$emit

子组件传递数据给父组件时,触发事件,从而抛出数据。

推荐使用这种方式进行子->父通信。

v-model

.sync

$attrs

祖先组件传递数据给子孙组件时,可以利用$attrs传递。

demo或小型项目可以使用$attrs进行数据传递,中大型项目不推荐,数据流会变的难于理解。

$attrs的真正目的是撰写基础组件,将非Prop特性赋予某些DOM元素。

$listeners

可以在子孙组件中执行祖先组件的函数,从而实现数据传递。

demo或小型项目可以使用$listeners进行数据传递,中大型项目不推荐,数据流会变的难于理解。

$listeners的真正目的是将所有的事件监听器指向这个组件的某个特定的子元素。

$root

可以在子组件中访问实例的数据。

对于 demo 或非常小型的有少量组件的应用来说这是很方便的。中大型项目不适用。会使应用难于调试和理解。

$parent

可以在子组件中访问实例的数据。

对于 demo 或非常小型的有少量组件的应用来说这是很方便的。中大型项目不适用。会使应用难于调试和理解。

$children

可以在父组件中访问实例的数据。

对于 demo 或非常小型的有少量组件的应用来说这是很方便的。中大型项目不适用。会使应用难于调试和理解。

ref

可以在父组件中访问实例的数据。

$refs 只会在组件渲染完成之后生效,并且它们不是响应式的,适用于demo或小型项目。

provide & inject

祖先组件提供数据(provide),子孙组件按需注入(inject)。

会将组件的阻止方式,耦合在一起,从而使组件重构困难,难以维护。不推荐在中大型项目中使用,适用于一些小组件的编写。

eventBus(事件总线)

Vue.prototype.$bus = new Vue();
Vue.component('cmp-a', {
  data () {
    return {
      a: 'a'
    }
  },
  methods: {
    onClick () {
      this.$bus.$on('click', this.a)
    }
  },
  template: `
    <div>
      <button @click="onClick">点击</button>
    </div>
  `,
})
Vue.component('cmp-a', {
  mounted () {
    this.$bus.$on('click', data => {
      console.log(data);
    })
  },
  template: `
    <div>b</div>
  `,
})

非父子组件通信时,可以使用这种方法,但仅针对于小型项目。中大型项目使用时,会造成代码混乱不易维护。

Vuex

状态管理,中大型项目时强烈推荐使用此种方式,日后再学~

最后

如果对您有帮助,希望能给个👍评论/收藏/三连!

博主为人老实,无偿解答问题哦❤

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。