VUE爷孙组件传值

$attrs 是一个 Object,它包含了父作用域中不作为 prop 被识别 (且获取) 的 attribute 绑定 (class 和 style 除外)。

如果组件没有声明任何 prop 时,这里会包含所有父作用域的绑定 (class 和 style 除外),并且可以通过 v-bind="$attrs" 传入内部组件。

爷爷传孙子

1.爷爷组件的代码

<template>
  <div id="app">
    我是App最外层的爷爷组件
    <father  @arr='arr'  :datas='datas' :msg='msg'></father>
  </div>
</template>

<script>
import Father from './components/Father.vue'

export default {
  name: 'App',
  components: {
    Father
  },
  data() {
    return {
      datas: '我是datas',
      msg: '我是msg',
    }
  }
}
</script>

2.父组件的代码

<template>
  <div class="hello">
    我是父组件
    <p>这是由app传递过来的数据:::{{datas}}</p>

    <boy @arr='arr' v-bind='$attrs'></boy>//通过v-bind将$attrs传递给子组件
  </div>
</template>

<script>
import Boy from './Boy'
export default {
  name: 'Father',
  components:{
    Boy
  },
  props: {
   datas: {
     type: String
   }
  },
}
</script>

3.孙子组件代码

<template>
  <div class="hello">
    我是孙子组件  
     <p>这里是爷爷组件传递过来的值,但是不包括父组件已经用props接收的数据:::: {{$attrs}}</p>
  </div>
</template>

<script>
export default {
  name: 'Boy',
}
</script>

孙子组件向爷爷组件传值

1.爷爷组件代码

<template>
  <div id="app">
    我是App最外层的组件
    <p v-for="item in appArr" :key='item'>{{item}}</p>
  </div>
</template>

<script>
import Father from './components/Father.vue'

export default {
  name: 'App',
  components: {
    Father
  },
  data() {
    return {
      appArr: []
    }
  },
  methods: {
    getArr(data) {
      this.appArr = data
    }
  }
}
</script>

2.父亲组件代码

<template>
  <div class="hello">
    我是父组件
    <boy @arr='arr' v-on='$listeners'></boy>
  </div>
</template>

<script>
import Boy from './Boy'
export default {
  name: 'Father',
  components:{
    Boy
  }
}
</script>

3.孙子组件代码

<template>
  <div class="hello">
    我是子组件   
    <button @click='clickBoy' >点击按钮向爷爷组件传递数据</button>
  </div>
</template>

<script>
export default {
  name: 'Boy',
  data() {
    return {
      arr:['西游记','红楼梦','三国演义','水浒传']
    }
  },
  methods:{
    clickBoy() {
      //这两种方法都是可以的
      // this.$emit('getArr',this.arr)  
      this.$listeners.getArr(this.arr)
    }
  }
}
</script>

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue中,爷孙组件之间的数据传递是通过props和$emit来实现的。爷孙组件之间不能直接通信,需要通过父组件作为中间组件传递数据。具体实现步骤如下: 1. 在祖父组件(GrandFather.vue)中,定义要传递的数据msg1和msg2,并在模板中将数据传递给父组件(Father)。 2. 在父组件(Father.vue)中,接收来自祖父组件的数据msg1和msg2,并将其作为props传递给子组件(GrandSon)。 3. 在子组件(GrandSon.vue)中,通过props接收来自父组件的数据msg1,并在需要的地方使用。 4. 如果子组件需要向爷爷组件传递数据,则在子组件中通过$emit方法触发一个自定义事件,并将数据作为参数传递给爷爷组件。 5. 在爷爷组件中,通过监听子组件的自定义事件,将接收到的数据绑定到data中的reply属性上,以便在视图层渲染。 通过以上步骤,就可以实现Vue爷孙组件之间的数据传递。请注意,父组件作为中间组件传递数据的过程中需要使用props,而子组件向父组件传递数据需要使用$emit方法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Vue祖孙组件怎么传值](https://blog.csdn.net/qq_40738077/article/details/106765455)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值