我是靠谱客的博主 矮小电源,最近开发中收集的这篇文章主要介绍vite2 + Vue3 中 组件传值,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

父传子

父组件:

<template>
  <div class="son">
    <son1 :toChild="toChild" />
  </div>
</template>
<script>
import { reactive, toRefs } from 'vue'
import son1 from './branch/son1.vue'
export default {
  components: {
    son1
  },
  setup(props,context) {
    const data = reactive({
      toChild: '传递数据1'
    })

    return {
      ...toRefs(data)
    }
  }
}
</script>

子组件

// 第一种-------------------配置setup-------------------
<script>
export default {
  props: {  //这里必须写,不然setup中的props也拿不到
    toChild: {
      type: String,
      default: '无数据'
    }
  },
  setup(props, context) {
    console.log(props.toChild)  //  传递数据1
    return {};
  },
};
</script>

// 第二种------------------setup语法糖--------------------
<script setup>
  const props = defineProps({
    name: {
      type: String,
      default: ''
    }
  })
</script>

 注意:defineProps只能直接暴露在setup下,不能放在回调中。不需要引入,直接调用即可

子传父

 子组件

// 第一种-----------------配置setup---------------------
<script>
import { ref } from "vue";
export default {
  setup(props, context) {
    const { emit } = context
    const msg = ref('999')
    // 子传父
    const send = () => {
      emit('sonSend',msg)
    }
    return {
      msg,
      send
    };
  },
};
</script>

// 第二种-----------------setup语法糖----------------------
<script setup>
  const emit = defineEmits(['sonSend'])
  const btnClick = () => {
    emit('sonSend', '999')
  }
</script>

 注意:defineEmits只能直接暴露在setup下,不能放在回调中。不需要引入,直接调用即可.同defineProps

父组件

<template>
  <div class="son">
    <son1 @sonSend="sonSend" />  //监听子组件的自定义事件
  </div>
</template>
<script>
import son1 from './branch/son1.vue'
export default {
  components: {
    son1
  },
  setup(props,context) {
    const sonSend = (val) => {
      console.log(val.value)  // 999
    }
    return {
      sonSend
    }
  }
}
</script>

兄弟之间传值

vue2 我们通过EventBus   new Vue的方式来实现。Vue3 中没有了 EventBus 跨组件通信,但是现在有了一个替代的方案 mitt.js,原理还是 EventBus

1.安装mitt

npm install mitt --save 

2. 新建 bus.js

bus.js 

import mitt from 'mitt'

const bus = mitt()

export default bus

 然后直接引用就可以了

兄弟组件1

  <template>
    <button @click="btn">我是兄弟组件b</button>
  </template>
 
  import bus from '@/utils/bus'
  function btn() {
    bus.emit("fromBother", '传给好兄弟'); //参数一为自定义事件名称,参数二是传递的参数
  }
  return{
      btn
  }

 兄弟组件2

import bus from '@/utils/bus'
import { onUnmounted } from "vue"
 
setup(props,context) {
  function fromBother(val) {
    console.log(val,'val--->>>兄弟传过来')
  }
  onMounted(() => {
    bus.on('fromBother',fromBother)   //监听兄弟组件传过来的值
  })
  onUnmounted(() => {  //销毁的时候 解绑
    bus.off('fromBother',fromBother)
  })
  return {}
}

最后

以上就是矮小电源为你收集整理的vite2 + Vue3 中 组件传值的全部内容,希望文章能够帮你解决vite2 + Vue3 中 组件传值所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(67)

评论列表共有 0 条评论

立即
投稿
返回
顶部