您好,登錄后才能下訂單哦!
這篇文章主要介紹了使用vue的作用域插槽的原因是什么,具有一定借鑒價值,需要的朋友可以參考下。下面就和我一起來看看吧。
Vue插槽是一種將內(nèi)容從父組件注入子組件的絕佳方法。
下面是一個基本的示例,如果我們不提供父級的任何slot
位的內(nèi)容,剛父級<slot>
中的內(nèi)容就會作為后備內(nèi)容。
// ChildComponent.vue <template> <div> <slot> Fallback Content </slot> </div> </template>
然后在我們的父組件中:
// ParentComponent.vue <template> <child-component> Override fallback content </child-component> </template>
編譯后,我們的DOM將如下所示。
<div> Override fallback content </div>
我們還可以將來自父級作用域的任何數(shù)據(jù)包在在 slot
內(nèi)容中。 因此,如果我們的組件有一個名為name
的數(shù)據(jù)字段,我們可以像這樣輕松地添加它。
<template> <child-component> {{ text }} </child-component> </template> <script> export default { data () { return { text: 'hello world', } } } </script>
我們來看另一個例子,假設(shè)我們有一個ArticleHeader
組件,data
中包含了一些文章信息。
// ArticleHeader.vue <template> <div> <slot v-bind:info="info"> {{ info.title }} </slot> </div> </template> <script> export default { data() { return { info: { title: 'title', description: 'description', }, } }, } </script>
我們細看一下 slot
內(nèi)容,后備內(nèi)容渲染了 info.title
。
在不更改默認后備內(nèi)容的情況下,我們可以像這樣輕松實現(xiàn)此組件。
// ParentComponent.vue <template> <div> <article-header /> </div> </template>
在瀏覽器中,會顯示 title
。
雖然我們可以通過向槽中添加模板表達式來快速地更改槽中的內(nèi)容,但如果我們想從子組件中渲染info.description
,會發(fā)生什么呢?
我們想像用下面的這種方式來做:
// Doesn't work! <template> <div> <article-header> {{ info.description }} </article-header> </div> </template>
但是,這樣運行后會報錯 :TypeError: Cannot read property ‘description’ of undefined
。
這是因為我們的父組件不知道這個info
對象是什么。
那么我們該如何解決呢?
簡而言之,作用域內(nèi)的插槽允許我們父組件中的插槽內(nèi)容訪問僅在子組件中找到的數(shù)據(jù)。 例如,我們可以使用作用域限定的插槽來授予父組件訪問info
的權(quán)限。
我們需要兩個步驟來做到這一點:
使用v-bind
讓slot
內(nèi)容可以使用info
在父級作用域中使用v-slot
訪問slot
屬性
首先,為了使info
對父對象可用,我們可以將info
對象綁定為插槽上的一個屬性。這些有界屬性稱為slot props。
// ArticleHeader.vue <template> <div> <slot v-bind:info="info"> {{ info.title }} </slot> </div> </template>
然后,在我們的父組件中,我們可以使用<template>
和v-slot
指令來訪問所有的 slot props。
// ParentComponent.vue <template> <div> <child-component> <template v-slot="article"> </template> </child-component> </div> </template>
現(xiàn)在,我們所有的slot props,(在我們的示例中,僅是 info
)將作為article
對象的屬性提供,并且我們可以輕松地更改我們的slot
以顯示description
內(nèi)容。
// ParentComponent.vue <template> <div> <child-component> <template v-slot="article"> {{ article.info.description }} </template> </child-component> </div> </template>
最終的效果如下:
盡管Vue 作用域插槽是一個非常簡單的概念-讓插槽內(nèi)容可以訪問子組件數(shù)據(jù),這在設(shè)計出色的組件方面很有用處。 通過將數(shù)據(jù)保留在一個位置并將其綁定到其他位置,管理不同狀態(tài)變得更加清晰。
以上就是使用vue的作用域插槽的原因是什么的詳細內(nèi)容了,看完之后是否有所收獲呢?如果想了解更多相關(guān)內(nèi)容,歡迎來億速云行業(yè)資訊!
原文地址:https://learnvue.co/2021/03/when-why-to-use-vue-scoped-slots/
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。