有的時候我們會遇到這個場景,
代碼示例:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5iMyEDNygjZ1kTM3gDZmRjMzYzXzQTO0YDM3EzLclDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
就是我再調用一個
myform
,回到頁面上我們重新整理:
你會發現多了一個input框,但是送出按鈕不見了,這是為什麼呢?
這是因為我使用你子元件的時候就沒給你傳插槽的值,是以這塊slot,你就拿不到slot的内容,就沒有東西展示。
一般比如說點選的按鈕,我是希望它如果你沒傳這個插槽,也應該有一個預設的展示,不然的話我這功能就不好用了。
遇到這個場景我們怎麼給它一個預設值,我們可以這樣去寫:
代碼示例:
在調用slot的時候,在這兩個slot中間寫一個default value,然後回到頁面上我們重新整理,你會發現這個時候它就會出來default value了。
也就是如果你沒有傳插槽的内容的時候,我去調你插槽發現沒有内容,我就會用中間的 default value作為一個預設值。
大家看到的現在default value可以點選,
當然上面這兩個元件的調用,你傳了插槽,你傳了插槽之後我發現你有slot,那麼我就不會用預設值了。是以這是slot的一個預設值設定的文法,一定要記住。
還有一些場景,比如說這樣的一個例子:
代碼示例:
代碼解讀:
我現在有一個div标簽,然後它的名字叫做layout,意思是布局,上面我也使用layout元件。
在這個布局裡我把 methods 去掉,它到底要展示什麼内容,完全是由父元件來告訴我的,
那麼父元件就要告訴它你展示什麼樣的一些内容,但是子元件裡有一些特殊的邏輯,比如說我現在有一個叫做content的區域,
這塊我寫一個content,
content頂部會有header,底部會有footer,我隻管 content 部分的展示,但是頭和尾到底要展示什麼?需要你父元件調我的時候來告訴我,
我要怎麼寫?
代碼示例:
在這裡就要寫一個div,傳遞一個slot進去,告訴你頭和尾展示什麼。我
告訴你我有一個header,
然後我告訴你我還有一個footer,
執行效果:
你會發現你header和footer就必須在content的上面,
或者你換一個位置,把slot放到content的下邊,
我們再來重新整理,效果如下:
content變成最上面,header和footer變成最下面了。
也就是說我這麼去寫這兩個東西加在一起是一個slot:
沒法做到一個效果 就是我把header放在content上面,footer放在content下面,
隻能說把這一個區塊整體放在content的上面或者content的下面,有沒有辦法解決這個問題?
有的有的。我們可以這樣去寫,在 div标簽上給它一個v-slot标簽,讓它等于一個header,
同樣的在下面也給一個v-slot标簽,讓它等于一個footer:
也就是我告訴你的子元件,我傳遞的 slot,你把它拆成兩個部分,第一個部分起個名字叫做header,第二個部分起個名字叫做footer,
你看你不傳的時候,它是個整體,
現在你傳了這兩個東西,相當于你告訴它把一個大的slot拆成兩個部分,分别是header和footer,
那麼拆成兩個部分,你下面掉這個slot也不能整體去調用了,你必須再加一個name等于footer:
告訴ta你拆分的 slot你要調的是哪一部分,我可以在下面調用的是footer這個部分,
在上面我調 slot的時候,我讓name等于header,
儲存一下,再回到我們的頁面上重新整理。這個時候它會有錯誤,我們看哪裡寫的不對?
此時代碼示例:
我們發現直接把v-slot div 的标簽上 它是不認、不會生效的。如果你要這麼拆分,還要記住你要在外面加一個template這樣的一個占位符,
然後把你的v-slot标簽放到template上裡面去。
此時代碼示例:
寫完這樣的代碼,我們再到頁面上重新整理,它還會提示我們現在有一點問題:
這塊主要的原因我們回到代碼裡面,我這個文法寫的有一些問題, v-slot如果你給它做拆分的時候給它一個名字的話,不要用等号,要用冒号後面跟這個名字,這樣的一個文法才是正确的文法:
我們再回到浏覽器重新整理,就沒有任何問題了:
我就可以把你傳遞過來的slot拆分成兩個部分,一部分放在 content的上面,header就展示在這裡,一部分放在content的下面,footer就在這裡。那麼剛才講的知識點,我們把它叫做具名插槽,怎麼了解具名插槽呢?
你可以這麼去了解,本身我一個插槽隻能一個大的區域一起去使用,但是我要把插槽拆成幾個部分,每個部分我在下面可以分開的調用,就要通過一個name來做區分了,
是以我們要給一個大的内容拆成幾個小的片段,每個片段要命上名字,這每一個小的片段,我們就把它叫做一個具名插槽,即: