深入瞭解Vue3組件傳值方式
今天說一下 vue3 的組件間傳值,學習過 vue2 的寶子們肯定知道,組件傳值是 vue 項目開發過程中必不可少的功能場景,在 vue2 裡面有很多傳值的方式,vue3 的傳值方式呢,在這裡稍微整理總結一下,但是不是很全,後期可能慢慢補充。
父子組件傳值 props
和 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 傳值的基本用法。
祖孫組件傳值 provide 和 inject
這個其實和 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>
以上就是深入瞭解Vue3組件傳值方式的詳細內容,更多關於Vue3組件傳值的資料請關註WalkonNet其它相關文章!