您好,登錄后才能下訂單哦!
這篇文章主要介紹了vue3中setup參數attrs,slots,emit實例分析的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇vue3中setup參數attrs,slots,emit實例分析文章都會有所收獲,下面我們一起來看看吧。
home.vue
<template> <div class="home"> <img alt="Vue logo" src="../assets/logo.png" /> <HelloWorld msg="Welcome to Your Vue.js App" proper="1" @custome="handler"> <template v-slot:one> {{ home }} - 子組件插槽的數據: </template> </HelloWorld> </div> </template> <script> import HelloWorld from "@/components/HelloWorld.vue"; export default { name: "Home", data() { return { home: "主頁", }; }, components: { HelloWorld }, methods: { handler(args) { console.log("子組件傳遞的參數:", args); }, }, }; </script>
Helloworld.vue
<template> <div class="hello"> <h2>{{ msg }}</h2> <span>這里是插槽內容:</span> <slot slotone="01" name="one"></slot> <slot slottwo="02" name="two"></slot> <hr /> <button @click="$emit('custome', '參數')">點擊傳遞參數</button> </div> </template> <script> export default { name: "HelloWorld", props: { msg: String, }, setup(props, context) { console.log("props:", props); console.log("context:", context); const { attrs, slots, emit } = context; console.log("attrs:", attrs); console.log("slots:", slots); console.log("emit:", emit); }, }; </script>
控制臺輸出:
props: Proxy {msg: "Welcome to Your Vue.js App"} context: {expose: ?} attrs: Proxy {proper: "1", __vInternal: 1, onCustome: ?} slots: Proxy {_: 1, __vInternal: 1, one: ?} emit: (event, ...args) => instance.emit(event, ...args)
繼續展開:
結合圖里面圈起來的部分,我大概得出的結論
context
上下文這里應該是指helloworld
這個組件
attrs
也就組件的是那個$attrs
(不含props,但是包含函數方法)
slots
是組件插槽,并且是有被“使用”的插槽,因為另外一個插槽"two"沒有對應的模板渲染
emit
感覺是組件的自定義事件到底是什么呢?但是,這里看控制臺輸出實際上也得不出什么內容。
想知道以上4條結論理解是否正確。
大致是對的。唯有第一點稍稍有點兒問題,context
不是這個組件的真正對象,只是在 setup
時帶了其中一部分信息的玩意兒,執行 setup
時這個組件對象還沒被創建出來呢。
不知道題主以前接沒接觸過 Vue2 或者 Vue3 的 Options API 寫法,要是直接上來就是 Vue3 Composition API 確實不太容易理解。
后面仨其實就是 Options API 里的 this.$attrs
、this.$slots
、this.$emit
,因為 setup
時還沒有 this
呢,所以變成了這樣寫。
關于“vue3中setup參數attrs,slots,emit實例分析”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“vue3中setup參數attrs,slots,emit實例分析”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。