vue组件之间的通信以及如何在父组件中调用子组件的方法和属性
在Vue中组件实例之间的作用域是孤立的,以为不能直接在子组件上引用父组件的数据,同时父组件也不能直接使用子组件的数据
一、父组件利用props往子组件传输数据
父组件:
<div> <child v-bind:my-message="parentMsg"></child>//注意传递参数时要用—代替驼峰命名,HTML不区分大小写 </div>
子组件:
Vue.component('child', { // camelCase in JavaScript props:{myMessage}, template: '<span>{{ myMessage }}</span>' })
如上所示,父组件在模板中引用子组件,通过v-bind传递参数myMessage,值为parentMsg,其可以为父组件中的动态属性,同时不用v-bind直接myMessage="hello传递静态值给子组件,则传递的值就是hello字符串。在利用props实现传值的过程中理论上是要实现单向传递,即父组件改变相关参数的值,子组件也相应变化,但是子组件对参数的改变不应该影响父组件。但是当props中接收的是父组件传递的引用类型(对象或者是数组)时,在子组件中对数据改变时,父组件中的数据也会相应的改变,因为两者是指向的同一地址内存。如果不想子组件的改变影响父组件可以利用深拷贝,将接受的数据进行深拷贝后在子组件中使用,而不直接操作接受的数据。深拷贝可以直接利用ES6中的obj=Object。assign({},myMessage)(在computed中定义),这样子组件的改动将不会影响到父组件。
二、子组件向父组件传递参数利用事件机制
子组件通过this.$emit()派发事件,父组件利用v-on对事件进行监听,实现参数的传递
子组件:
this.$emit('changeCart',event.target)/*向父组件派发事件,同时传递参数event.target,后面的参数的个数不限*/
父组件:
<v-cartcontrol :food="food" v-on:changeCart="changeCart"></v-cartcontrol>
同时当有组件嵌套时则需要利用该机制一层一层的触发到指定层,不然直接在顶层监听子组件的子组件的事件是监听不到的,需要先向父组件派发,父组件在向上层触发
三、利用ref属性可以获取到dom元素或者是子组件,从而可以调用子组件的方法(注意2.0版本用ref取代了el)
1、当ref直接定义在dom元素上时,则通过this.$refs.name可以获取到dom对dom进行原生的操作
1
|
< div class="foods-wrapper" ref="foods-wrapper"> |
通过this.$refs获取到dom进行操作(注意ref属性的命名不能用驼峰,同时获取的时候也是)
1
|
let menuList=this.$refs['menu-wrapper'].getElementsByClassName('menu-list-hook');//此处如果用this.$refs["menuWrapper"]将获取不到元素 |
2、通过在引用的子组件上使用ref属性实现父组件调用子组件的方法以及属性
在父组件中引用子组件并定义ref
1
|
< v-food ref="selectfood"></ v-food > |
调用定义在子组件中的方法show
1
|
this.$refs.selectfood.show();//同时也可以调用子组件中的属性 |
声明下上面说的是vue 2.0的
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
2018-04-25 How to setup Laravel Homestead in Windows