Vue3中组件传值方式是怎样,有几种
Admin 2022-08-11 群英技术资讯 677 次浏览
今天说一下 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进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
对于验证码详细大家都不陌生,我们在登录或者注册页面,常能看到验证码。而我们在做验证码的时候要考虑到,获取验证码的时间间隔,因为如果不设置这个,那么就会出现短时间或者大量验证码的情况,对此这篇文章就给大家介绍用JS实现间隔10秒载获取验证码的功能,感兴趣的朋友就继续往下看吧
这篇文章主要介绍了ElementUI在实际项目使用的功能总结,本文分步骤通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于闭包的相关问题,其中包括了闭包是什么、为什么要这么设计以及能怎么用的相关内容,下面一起来看一下,希望对大家有帮助。
这篇文章给大家分享的是微信小程序中的页面左右滑动效果的实现,这个效果的应用还是比较多的,小编觉得挺实用的,因此分享给大家做个参考,文中示例代码介绍的非常详细,感兴趣的朋友接下来一起跟随小编看看吧。
这篇文章主要介绍了快速解决vue2+vue-cli3项目ie兼容的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008