Vue所有的通信方式(全)
【摘要】 组件_通信 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)