什么是Vue组件?

组件 (Component) 是 Vue.js 最强大的功能之一。组件可以扩展 HTML 元素,封装可重用的代码。在较高层面上,组件是自定义元素,Vue.js 的编译器为它添加特殊功能。在有些情况下,组件也可以是原生 HTML 元素的形式,以 is 特性扩展。

Vue组件间通信

父组件向子组件通信

方法一:props

使用props,父组件可以使用props向子组件传递数据。

父组件vue模板father.vue

<template><child :msg="message"></child>
</template><script>import child from './child.vue';export default {components: {child},data () {return {message: 'father message';}}
}
</script>

子组件vue模板child.vue

<template><div>{{msg}}</div>
</template><script>
export default {props: {msg: {type: String,required: true}}
}
</script>

方法二 使用$children

使用$children可以在父组件中访问子组件。

子组件向父组件通信

方法一:使用vue事件

父组件向子组件传递事件方法,子组件通过$emit触发事件,回调给父组件。

父组件vue模板father.vue

<template><child @msgFunc="func"></child>
</template><script>import child from './child.vue';export default {components: {child},methods: {func (msg) {console.log(msg);}}
}
</script>

子组件vue模板child.vue

<template><button @click="handleClick">点我</button>
</template><script>
export default {props: {msg: {type: String,required: true}},methods () {handleClick () {//........this.$emit('msgFunc');}}
}
</script>

方法二: 通过修改父组件传递的props来修改父组件数据

这种方法只能在父组件传递一个引用变量时可以使用,字面变量无法达到相应效果。因为饮用变量最终无论是父组件中的数据还是子组件得到的props中的数据都是指向同一块内存地址,所以修改了子组件中props的数据即修改了父组件的数据。

但是并不推荐这么做,并不建议直接修改props的值,如果数据是用于显示修改的,在实际开发中我经常会将其放入data中,在需要回传给父组件的时候再用事件回传数据。这样做保持了组件独立以及解耦,不会因为使用同一份数据而导致数据流异常混乱,只通过特定的接口传递数据来达到修改数据的目的,而内部数据状态由专门的data负责管理。

方法三:使用$parent

使用$parent可以访问父组件的数据。

非父子组件、兄弟组件之间的数据传递

非父子组件通信,Vue官方推荐使用一个Vue实例作为中央事件总线。

Vue内部有一个事件机制,可以参考源码。

$on方法用来监听一个事件。

$emit用来触发一个事件。

/*新建一个Vue实例作为中央事件总嫌*/
let event = new Vue();/*监听事件*/
event.$on('eventName', (val) => {//......do something
});/*触发事件*/
event.$emit('eventName', 'this is a message.');

多层级父子组件通信:

在Vue1.0中实现了broadcast与broadcast与dispatch两个方法用来向子组件(或父组件)广播(或派发),当子组件(或父组件)上监听了事件并返回true的时候会向爷孙级组件继续广播(或派发)事件。但是这个方法在Vue2.0里面已经被移除了。

之前在学习饿了么的开源组件库element的时候发现他们重新实现了broadcast以及dispatch的方法,以mixin的方式引入,具体可以参考《说说element组件库broadcast与dispatch》。但是跟Vue1.0的两个方法实现有略微的不同。这两个方法实现了向子孙组件事件广播以及向多层级父组件事件派发的功能。但是并非广义上的事件广播,它需要指定一个commentName进行向指定组件名组件定向广播(派发)事件。

其实这两个方法内部实现还是用到的还是parent以及parent以及children,用以遍历子节点或是逐级向上查询父节点,访问到指定组件名的时候,调用$emit触发指定事件。

复杂的单页应用数据管理

当应用足够复杂情况下,请使用vuex进行数据管理。

Vue.js解析(十)【Vue组件间通信】相关推荐

  1. python 全栈开发,Day91(Vue实例的生命周期,组件间通信之中央事件总线bus,Vue Router,vue-cli 工具)...

    昨日内容回顾 0. 组件注意事项!!!data属性必须是一个函数!1. 注册全局组件Vue.component('组件名',{template: ``})var app = new Vue({el: ...

  2. Vue学习笔记三(组件间通信)

    主要通信方式包括: 1.props属性 父---->子,子传父也可以通过方法实现,传递的可以是一个数据对象,或者一个方法,是方法的时候子组件调用该方法,通过传参方式将数据传递给父组件. < ...

  3. Vue 组件间通信方法汇总

    Vue 组件间通信方法汇总 ⭐️ 更多前端技术和知识点,搜索订阅号 JS 菌 订阅 除了使用 Vuex 方法外,vue 提供了各种各样的组件间通信的方案.文章整理一下父子组件.兄弟组件.祖先后代组件间 ...

  4. Vue组件间通信方法总结(父子组件、兄弟组件及祖先后代组件间)

    前言 除了使用 Vuex 方法外,vue 提供了各种各样的组件间通信的方案.文章整理一下父子组件.兄弟组件.祖先后代组件间是如何通信的.

  5. 深入解析Vue组件间通信

    React的基本组件元素是一个个组件,组件之间可能存在关联.组合等关系.不同的组件之间,经常会发生数据传递或者交换,我们称之为组件间通信. 根据传递的复杂程度,可以分为三种情况: 父子间通信,兄弟间通 ...

  6. Vue学习(十六):组件间通信

    1. props 1.1 使用 功能:让组件接收外部传过来的数据 传递数据:<Demo name="xxx"/> 接收数据: 第一种方式(只接收):props:['na ...

  7. Vue组件间通信--Vuex

    1.概念 ​ 在Vue中实现集中式状态(数据)管理的一个Vue插件,对vue应用中多个组件的共享状态进行集中式的管理(读/写),也是一种组件间通信的方式,且适用于任意组件间通信. 2.何时使用? ​多 ...

  8. Vue中组件间通信的方式

    Vue中组件间通信的方式 Vue中组件间通信包括父子组件.兄弟组件.跨级组件.非嵌套组件之间通信. props $emit props $emit适用于父子组件的通信,这种组件通信的方式是我们运用的非 ...

  9. vue组件穿方法_vue组件间通信六种方式(完整版)

    [51CTO.com原创稿件] 前言 组件是 vue.js强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用.一般来说,组件可以有以下几种关系: 如上图所示,A ...

最新文章

  1. 一学就会的 Python 时间转化总结(超全)
  2. etcd分布式之负载均衡
  3. python 判断是否是int/string/类型的函数
  4. 计算机启动进入不了桌面图标,电脑开机后不显示桌面图标如何通过修改注册表解决问题...
  5. 安装运行symfony框架编写的edusoho开源程序
  6. 洛谷P3803 【模板】多项式乘法(FFT)
  7. 计算机应用基础0035形考答案,计算机应用基础0035形考答案
  8. Android中如何获取应用版本号
  9. 如何调整cmd窗口的颜色
  10. matlab图像处理宝典 秦襄培,秦襄培
  11. hive sql 怎么实现循环_shell中循环调用hive sql 脚本的方法
  12. 21.MySQL 性能优化
  13. 如何添加xp操作系统的打印服务器,xp系统添加局域网打印机的简单方法
  14. 语言和语义(一,什么是语言)
  15. 老梦毕设学习平台设计——Home设计
  16. 移动APP设计国外资源总汇
  17. 老祖宗的绝招对治腰疼,别说你没听过
  18. 用python解决五格与起名问题
  19. 基于高德离线地图数据实现GPS经纬度逆解析城市信息
  20. 【谷粒商城高级篇】商品服务 商品上架

热门文章

  1. 雷击浪涌抑制电路设计---放电管、压敏电阻、TVS管
  2. 2021~2022年全国考试/考证时间表(最全)
  3. 东南大学 计算机学院 夏令营,东南大学计算机科学与工程学院计算机技术(专业学位)保研夏令营...
  4. 基于无人机遥感影像的农田作物识别(九)
  5. 无人机遥感技术在房产测绘中的应用
  6. 2020 远景智能笔试 成绩排序 第二题 Python3
  7. NeurlPS‘22 推荐系统论文梳理
  8. MYSQL主从同步的作用
  9. Echarts——sunburt 旭日图
  10. Git客户端(Windows系统)的使用