当前位置:网站首页 > Vue.js开发 > 正文

VUE实现父子组件传值以及递归组件的传值

父组件给子组件传值

父组件通过 :xxx="xxx" 绑定要传的值

src\views\components\Header.vue

<template> <div id="header"> <engineer :viewer="viewer"></engineer> </div> </template> <script> import Engineer from "./HeaderMenu/Engineer" export default { name:"Header", components:{ Engineer } } </script> 

子组件通过props接收父组件传过来的值

src\views\components\HeaderMenu\Engineer.vue

<template> <div id="engineer"> <div class="operation"> <div><i class="el-icon-folder-add"></i><p>新建</p></div> </div> </div> </template> <script> export default { name:"Engineer", props: { viewer: { type: Object, default () { return {};//Props with type Object/Array must use a factory function to return the default value. } } }, } </script> 

子组件给父组件传值

子组件通过this.$emit发送要传递的值

<template> <div id="engineer"> <div class="operation"> <div @click="iconConfig("flag")"><i class="el-icon-folder-add"></i><p>新建</p></div> </div> </div> </template> <script> export default { name:"Engineer", props: { viewer: { type: Object, default () { return {};//Props with type Object/Array must use a factory function to return the default value. } } }, methods:{ iconConfig(data){ this.$emit('model',data); console.log(data,"data.label.name") } } } </script> 

父组件

<template> <div id="header"> <engineer :viewer="viewer" @model="getModel"></engineer> </div> </template> <script> import Engineer from "./HeaderMenu/Engineer" export default { name:"Header", components:{ Engineer }, methods:{ getModel(data){ console.log('value', data) }, } } </script> 

注意:递归组件向外传递数据直接用$emit是无法实现的。

解决方法:

1方法1::用provide,inject方法实现。这种实现方法是实现爷爷组件和孙子组件通信的常用方法之一。但是逻辑上,爷爷组件和孙子组件之间是有耦合关系。如果组件封装需要尽量实现解耦,这种方式是有缺点的。

2.方法2:用eventBus实现:这种方法用在兄弟组件之间通信很常见。当然也可以用在爷爷组件和孙子组件之间的传递数据。

用这种方法实际上是用一个中介来传递数据,可以实现递归组件和使用它的组件之间的解耦。

来创建出我们的eventBus,我们把它命名为bus.js:

import Vue from 'vue'; export default new Vue(); 

在递归组件和使用它的组件同时引入:

import Bus from 'common/js/bus.js'; 

在递归组件里面触发事件:

methods: { addCart(event) { Bus.$emit('getTarget', event.target); } } 

在使用递归组件的父组件里面监听事件: 

created() { Bus.$on('getTarget', target => { console.log(target); }); } 

方法3:使用vuex方法,这种方法不加说明,肯定是可以实现的。缺点是:如果小项目,只是个别组件需要多级传递数据,引入vuex方法显然有点多余。

vue 中父子组件传值:props和$emit

vue中父子组件传值问题 通过props 和 $emit()方法

vue父子组件props传值,如何在子组件method里拿到父组件数据

到此这篇VUE实现父子组件传值以及递归组件的传值的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • VUE项目通过ip访问前端页面的相关配置2024-12-01 13:09:07
  • vue获取使用封装的函数返回值2024-12-01 13:09:07
  • VUE读取svg文件 修改svg图标颜色 base64编码图标路径并展示2024-12-01 13:09:07
  • JS递归实现遍历不规则多维数组的方法2024-12-01 13:09:07
  • js 判断字符串中是否包含某个字符串 删除指定字符2024-12-01 13:09:07
  • VUE非父子组件间的传值2024-12-01 13:09:07
  • JS跳出循环的遍历方法2024-12-01 13:09:07
  • vue组件中的this指向问题2024-12-01 13:09:07
  • VUE引入工具类2024-12-01 13:09:07
  • 在vue项目中引入使用ElementUI2024-12-01 13:09:07
  • 全屏图片