Vue3中组件传值方式是怎样,有几种
Admin 2022-08-11 群英技术资讯 1118 次浏览
今天这篇给大家分享的知识是“Vue3中组件传值方式是怎样,有几种”,小编觉得挺不错的,对大家学习或是工作可能会有所帮助,对此分享发大家做个参考,希望这篇“Vue3中组件传值方式是怎样,有几种”文章能帮助大家解决问题。今天说一下 vue3 的组件间传值,学习过 vue2 的宝子们肯定知道,组件传值是 vue 项目开发过程中必不可少的功能场景,在 vue2 里面有很多传值的方式,vue3 的传值方式呢,在这里稍微整理总结一下,但是不是很全,后期可能慢慢补充。
和 vue2 一样,vue3 也可以使用 props 进行父组件传值给子组件,这个就不多说了直接上代码。
父组件
<template>
<div>
<div class="father">
<h1>这是父组件</h1>
<h2>父组件的名字:{{boy.name}}</h2>
</div>
<hello-world :msg="msg" :boy="boy" @change="btn"></hello-world>
</div>
</template>
<script>
import HelloWorld from "./components/HelloWorld.vue";
import { ref, reactive } from "vue";
export default {
name: "App",
components: {
HelloWorld
},
setup() {
const boy = reactive({
name: "我是????????.",
age: 10
});
const msg = ref("这是一条信息");
const btn = val => {
console.log(val);
alert(val);
};
return { boy, msg, btn };
}
};
</script>
<style scoped>
.father {
background-color: aquamarine;
}
</style>
子组件
<template>
<div class="son">
<h1>这是子组件</h1>
<h2>这是父组件传进的数据: {{msg}}</h2>
<h2>这是父组件传进的数据: {{boy.name}}</h2>
<button @click="btn">传给父组件数据</button>
</div>
</template>
<script>
import { toRefs } from "vue";
export default {
name: "HelloWorld",
props: {
msg: String,
boy: Object
},
setup(props, { emit }) {
console.log(props);
const p = toRefs(props);
const msg = p.msg;
const boy = p.boy;
const btn = () => {
const news = "我是子组件传进的值";
emit("change", news);
};
return { msg, boy, btn };
}
};
</script>
<style scoped>
.son {
background-color: bisque;
}
</style>
保存查看效果。

上面就是 props 传值的基本用法。
这个其实和 vue2 的写法是一模一样的。
直接上代码!!
父组件
<template>
<div>
<div class="father">
<h1>这是父组件</h1>
<h2>名字:{{boy.name}}</h2>
<h2>年龄:{{boy.age}}</h2>
</div>
<hello-world></hello-world>
</div>
</template>
<script>
import HelloWorld from "./components/HelloWorld.vue";
import { reactive, provide } from "vue";
export default {
name: "App",
components: {
HelloWorld
},
setup() {
const boy = reactive({
name: "我是????????.",
age: 10
});
provide("boy", boy); // 往子孙组件传值
return { boy };
}
};
</script>
<style scoped>
.father {
background-color: aquamarine;
}
</style>
子组件
<template>
<div class="son">
<h1>这是子组件</h1>
<h2>这是父组件传进的数据: {{boy.name}}</h2>
<h2>这是父组件传进的数据: {{boy.age}}</h2>
</div>
</template>
<script>
import { toRefs, inject } from "vue";
export default {
name: "HelloWorld",
setup() {
const boy = inject("boy"); // 子孙组件接收值
return { boy };
}
};
</script>
<style scoped>
.son {
background-color: bisque;
}
</style>
刷新看一下效果。

好的,我们可以看到子组件可以顺利拿到父组件传进来的数据值。
就是使用 ref 来获取dom 然后操作里面的参数和方法。
父组件
<template>
<div>
<div class="father">
<h1>这是父组件</h1>
<h2>名字:{{boy.name}}</h2>
<h2>年龄:{{boy.age}}</h2>
<button @click="btn">传值</button>
</div>
<hello-world ref="hello" style="color: red"></hello-world>
</div>
</template>
<script>
import HelloWorld from "./components/HelloWorld.vue";
import { reactive, ref } from "vue";
export default {
name: "App",
components: {
HelloWorld
},
setup() {
const boy = reactive({
name: "我是????????.",
age: 10
});
const hello = ref();
function btn() {
hello.value.init(boy); // 调用子组件的方法,把boy对象传进去
}
return { boy, btn, hello };
}
};
</script>
<style scoped>
.father {
background-color: aquamarine;
}
</style>
子组件
<template>
<div class="son">
<h1>这是子组件</h1>
<h2>这是父组件传进的数据: {{boy.name}}</h2>
<h2>这是父组件传进的数据: {{boy.age}}</h2>
</div>
</template>
<script>
import { reactive, toRefs } from "vue";
export default {
name: "HelloWorld",
setup() {
let boy = reactive({
name: "ed.",
age: 11
});
// 提供给父组件调用的方法
const init = val => {
boy.name = val.name;
boy.age = val.age;
};
return { init, boy };
}
};
</script>
<style scoped>
.son {
background-color: bisque;
}
</style>

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
在 JavaScript 中如何判断两个值相等,这个问题看起来非常简单,但并非如此,在 JavaScript 中存在 4 种不同的相等逻辑,如果你不知道他们的区别,或者认为判断相等非常简单,本文就来为大家详细讲讲
JS中异步和单线程是什么?对于新手来说,可能不是很了解异步和单线程,因此下文小编就给大家来简单的介绍一下什么是异步和单线程,对帮大家学习和理解JavaScript的异步和单线程一定的帮助,感兴趣的朋友就继续往下看吧。
这篇文章主要给大家介绍的是keep-alive组件的缓存原理,很多对于keepalive缓存组件的用法可能比较熟练,但是其缓存原理并不是很清楚,对此下面会从源码角度与大家一起探讨一下keep-alive组件的缓存原理。
这篇文章主要为大家详细介绍了vue+elementUI实现分页效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
这篇文章主要为大家详细介绍了JavaScript实现简易折叠面板,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008