vue3中的(父传子,子传父、兄弟之间传值,后代关系组件传值)

6 篇文章 0 订阅
4 篇文章 0 订阅

1.父传子

父组件

<template>
    <h1>app.vue根组件----{{ count }}</h1>
    <button @click="add">+1</button>
    <HelloWord :count='count'></HelloWord>
</template>
<script>
import HelloWord from './components/HelloWorld.vue'
export default{
  name:'App',
  data() {
    return {
      count:0
    }
  },
  components:{
    HelloWord
  },
  methods:{
    add(){
      this.count++
    }
  }
}
</script>
<style></style>

子组件

<template>
    <h1>helloWord.vue根组件-----{{count}}</h1>
</template>
<script>
export default{
  name:'HelloWord',
  props:{
      count:{
      type:[Number,String],
      require:true,
      default:100
    },
  },

  methods: {
  },
}
</script>
<style></style>

2.子传父

 父组件(传给子组件需要用v-model进行双向绑定)

<template>
    <h1>app.vue根组件----{{ count }}</h1>
    <button @click="add">+1</button>
    <HelloWord v-model:count='count'></HelloWord>
</template>
<script>
import HelloWord from './components/HelloWorld.vue'
export default{
  name:'App',
  data() {
    return {
      count:0
    }
  },
  components:{
    HelloWord
  },
  methods:{
    add(){
      this.count++
    }
  }
}
</script>
<style></style>

子组件

需要用emits进行声明,update来更新数据

<template>
    <h1>helloWord.vue根组件-----{{count}}</h1>
    <button @click="add2">+1</button>
</template>
<script>
export default{
  name:'HelloWord',
  emits:['update:count'],
  props:{
      count:{
      type:[Number,String],
      require:true,
      default:100
    }
  },
  methods: {
     add2(){
      this.$emit('update:count',this.count+1)
    }
  },
}
</script>
<style></style>

3.兄弟传值

安装mitt包,创建eventBus

npm i mitt@2.1.0

创建eventBus.js

import mitt from 'mitt'
const bus =mitt()
export default bus

父(引入兄弟组件)

<template>
  <div>父亲</div>
  <Ge></Ge>
  <Di></Di>
</template>

<script>
import Ge from './gege.vue'
import Di from './didi.vue'

export default {
  name: 'App',
  data () {
   return {
   }
  },
  methods:{
  },
  components:{
    Ge,Di
  }
}
</script>

<style scoped>

</style>

didi.vue组件

<template>
  <div>弟弟------{{num}}</div>
</template>

<script>
import bus from './eventBus'
export default {
  name: 'Didi',
  data () {
   return {
    num:0
   }
  },
  methods:{
  },
  created(){
    bus.on('countChange',(count)=>{
      this.num=count
    })
  }
}
</script>

<style scoped>

</style>

gege.vue组件

<template>
  <div>哥哥----{{num}}</div>
  <button @click="add">+1</button>
</template>

<script>
import bus from './eventBus'
export default {
  name: 'Gege',
  data () {
   return {
    num:0
   }
  },
  methods:{
    add(){
      this.num++
      bus.emit('countChange',this.num)
    }
  }
}
</script>

<style scoped>

</style>

4.后代关系组件传值

父组件引入哥哥组件,哥哥组件引入弟弟组件

 父

<template>
  <div>父亲---{{num}}</div>
  <Ge></Ge>
</template>

<script>
import Ge from './gege.vue'
export default {
  name: 'App',
  data () {
   return {
    num:0
   }
  },
    provide(){
    return{
       num:this.num
    }
  },
  methods:{
  },
  components:{
    Ge
  }
}
</script>

<style scoped>

</style>

哥哥

<template>
哥哥
  <Di></Di>
</template>

<script>
import Di from './didi.vue'
export default {
  name: 'Ge',
  data () {
   return {
   }
  },

  methods:{
  },
  components:{
    Di
  }
}
</script>

<style scoped>

</style>

弟弟

<template>
  <div>
      弟弟----{{num}}
  </div>
</template>

<script>
export default {
  name: 'Di',
  data () {
   return {
   }
  },
  inject:['num'],
  methods:{
  }
}
</script>

<style scoped>

</style>

注意数据共享需在父组件引入computed

 弟弟组件

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值