原文作者:Alex Jover
譯者:程式猿何大叔
特別宣告:本文是作者 Alex Jover 釋出在 VueDose 上的一個系列。
版權歸作者所有。
譯者在翻譯前已經和作者溝通得到了翻譯整個系列的授權。
為了不影響大家閱讀,獲得授權的記錄會放在本文的最後。
很開心見到大家這麼喜歡 VueDose 的教程,最近我收到了讓我驚訝的關於效能提升的反饋,我非常感激讀者們的支援和讚揚 ?。
正文
上週 Vue.js 的 2.6.0-beta.3 版本已經發布,其中包含了進一步簡化作用域插槽的新特性。
這篇文章介紹了 vue 的新指令 v-slot
和其簡寫方式,就如在 RFC-0001 和 RFC-0002 中描述的一樣。
為了能夠弄清楚它是怎樣簡化語法的,我們來一起看看它在當前作用域插槽是怎樣的。想象一下你有一個 List
元件,並且它暴露了一個過濾後的列表資料作為它的作用域插槽。
你使用該帶有作用域插槽的 List
元件應該如下所示:
<template>
<List :items="items">
<template slot-scope="{ filteredItems }">
<p v-for="item in filteredItems" :key="item">{{ item }}</p>
</template>
</List>
</template>
複製程式碼
我們所要講解的主要內容與 List
元件的實現方式並沒有太大的關係,但是你可以在這個 Codesandbox 檢視示例原始碼。
然而,我們可以直接在元件標籤上使用新指令 v-slot
,避免了額外的巢狀:
<template>
<List v-slot="{ filteredItems }" :items="items">
<p v-for="item in filteredItems" :key="item">{{ item }}</p>
</List>
</template>
複製程式碼
記住 v-slot
指令只能用在元件或 template
標籤上,而不能使用在原生 html 標籤上。
這種方式能讓程式碼可讀性更高,特別是在你有巢狀的作用域插槽,使得難以定位作用域來源的情況下。
v-slot
指令也提供了一個繫結 slot
和 scope-slot
指令的方式,但是需要使用一個 :
來分割它們。舉個摘自 vue-promised 的例子:
<template>
<Promised :promise="usersPromise">
<p slot="pending">Loading...</p>
<ul slot-scope="users">
<li v-for="user in users">{{ user.name }}</li>
</ul>
<p slot="rejected" slot-scope="error">Error: {{ error.message }}</p>
</Promised>
</template>
複製程式碼
以上例子可以使用 v-slot
指令重寫如下:
<template>
<Promised :promise="usersPromise">
<template v-slot:pending>
<p>Loading...</p>
</template>
<template v-slot="users">
<ul>
<li v-for="user in users">{{ user.name }}</li>
</ul>
</template>
<template v-slot:rejected="error">
<p>Error: {{ error.message }}</p>
</template>
</Promised>
</template>
複製程式碼
最後,v-slot
以符號 #
作為其指令的簡寫模式,上一個例子可以被重寫為:
<template>
<Promised :promise="usersPromise">
<template #pending>
<p>Loading...</p>
</template>
<template #default="users">
<ul>
<li v-for="user in users">{{ user.name }}</li>
</ul>
</template>
<template #rejected="error">
<p>Error: {{ error.message }}</p>
</template>
</Promised>
</template>
複製程式碼
要記住的是,v-slot
指令預設應該簡寫為 #default
。
讀完文章,對於這個新的 slot 語法你感到興奮嗎?
你可以線上閱讀這篇 原文,裡面有可供複製貼上的原始碼。如果你喜歡這個系列的話,請分享給你的同事們!
結語
此係列的其他文章,會同步系列官網的釋出情況,及時地翻譯釋出到掘金。請持續關注「程式猿何大叔」,相信我會給大家帶來更多優質的內容,不要忘了點贊~
如果想要了解譯者的更多,請查閱如下:
- 個人部落格:blog.hadesz.com
- 個人 github 倉庫:github.com/hadeshe93
- 個人微信公眾號:搜尋「程式猿何大叔」
請求翻譯授權記錄
覺得本文不錯的話,分享一下給小夥伴吧~