Vue3组件传值


Vue3组件传值

提示:先了解defineProps,和defineEmites

defineProps 等同与vue2 的props
语法:

defineProps({
xxx:{
	type:类型,
	default:xxx
}
})

defineEmites
语法:

const emit = defineEmites(["xxx"])
// 触发事件
const btn = () => {
	emit("xxx",需要传的值)
}

一、父传子

//父组件
<template>
  <div>
  	<common-child :msg1="age"></common-child>
  </div>
</template>
<script setup>
//引入子组件
import CommonChild from '../components/CommonChild.vue'
let bb = reactive({
  name:"xiaoming",
  age:18
})
let {name , age} = toRefs(bb)
</script>


//子组件
<template>
  <div>
    我是vue3子组件+{{ props.msg1 }}
  </div>
</template>

<script setup>
 let props = defineProps({
        msg1:{
            type:Number,
        }
})
</script>

二、子传父

//父组件
<template>
  <div>
  	<common-child :msg1="age"></common-child>
  	<button @pbtn="getChild">按钮</button>
  	{{txt}}
  </div>
</template>
<script setup>
//引入子组件
import CommonChild from '../components/CommonChild.vue'
let bb = reactive({
  name:"xiaoming",
  age:18
})
let {name , age} = toRefs(bb)
let txt = ref("")
//拿到子传给父亲的值 并赋值给txt 
const getChild = (value) => {
	txt.value = value
}
</script>


//子组件
<template>
  <div>
    我是vue3子组件+{{ props.msg1 }}
    <button @click="btn">按钮</button>
  </div>
</template>

<script setup>
 let props = defineProps({
        msg1:{
            type:Number,
        }
})
let str = ref("我是子组件传过来的值")
const emit = defineEmites(["pbtn"])
const btn = () => {
	emit("pbtn",str)
}
</script>

三、兄弟传值(Bus)

1.引入第三方库mitt

引入第三方库mitt,在src目录下创建plugins文件夹,在文件夹里面创建Bus.js文件
代码如下(Bus.js):

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

2.在哥哥组件中导入

代码如下(示例):

<template>
  <div>
  	哥哥组件
    <button @click="handel2">按钮</button>
  </div>
</template>
<script setup>
import emiter from "../plugins/Bus.js"
    let txt = ref("传给弟弟的值")
    const handel2 = () => {
        emiter.emit("cfn",txt)
    }
</script>



2.在弟弟组件中导入

代码如下(示例):

<template>
    <div>
    我是弟弟组件
        {{str}}
    </div>
</template>

<script setup>
import emiter from '../plugins/Bus.js'
 let str = ref("")
 //这里可以拿到e.value 是哥哥组件传给弟弟的值,并赋值给str
 onBeforeMount(()=>{
    emiter.on("cfn",e=>{
        str.value = e.value
    })
 })
</script>

补充

子组件修改父组件传的值

子组件

<template>
  <div>
    我是vue3子组件+{{ props.msg1 }}
    <button @click="handel1">按钮1</button>
  </div>
</template>

<script setup>
 let props = defineProps({
        msg1:{
            type:Number,
        }
})
    const emit = defineEmits(["update:msg1"])   
    const handel1 = () => {
        console.log(111);
        emit("update:msg1",200)
    }
</script>

父组件

<template>
  <div>
    <common-child v-model:msg1="age"></common-child>
  </div>
</template>

<script setup>
import CommonChild from '../components/CommonChild.vue'
let bb = reactive({
  name:"xiaoming",
  age:18
})
let {name , age} = toRefs(bb)
</script>

在defineEmites(),中传入固定参数update:某父组件传来的值,就可以修改父组件的值

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 2和Vue 3中,组件传值的方式有一些差异。下面我将介绍Vue 2和Vue 3中常用的几种组件传值方式: Vue 2中的组件传值方式: 1. Props:通过在父组件中使用属性绑定的方式将数据传递给子组件。父组件通过在子组件标签上绑定属性,并在子组件中通过props选项声明接收该属性。父组件可以在模板中直接使用子组件的属性。 2. 自定义事件:父组件可以通过`$emit`方法触发自定义事件,并传递数据给子组件。子组件通过`$on`方法监听父组件触发的事件,并在事件处理函数中接收数据。 3. Vuex:Vuex是Vue的状态管理库,可以在全局共享数据。父组件可以将数据存储在Vuex的状态管理中,并在子组件中通过计算属性或直接从Vuex中获取数据。 Vue 3中的组件传值方式: 1. Props:与Vue 2相同,通过在父组件中使用属性绑定的方式将数据传递给子组件。但是在Vue 3中,子组件需要使用`defineProps`来声明接收属性。 2. 自定义事件:与Vue 2相同,父组件可以通过`$emit`方法触发自定义事件,并传递数据给子组件。子组件通过`$on`方法监听父组件触发的事件,并在事件处理函数中接收数据。 3. Provide/Inject:父组件通过provide选项提供数据,然后子组件通过inject选项注入数据。这样可以在整个组件树中共享数据,而不需要显式传递。 需要注意的是,Vue 3中还引入了Composition API,通过`setup`函数来组织组件的逻辑。在`setup`函数中,可以使用`ref`和`reactive`等函数来创建响应式数据,并通过`props`参数接收父组件传递的属性。 以上是Vue 2和Vue 3中常用的组件传值方式,根据具体需求和场景选择合适的方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值