亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

Vue插槽原理與用法詳解

2019-11-19 12:02:14
字體:
來源:轉載
供稿:網友

本文實例講述了Vue插槽原理與用法。分享給大家供大家參考,具體如下:

1 插槽內容

Vue 實現了一套內容分發的 API,這套 API 基于當前的 Web Components 規范草案,將 <slot> 元素作為承載分發內容的出口。

它允許你像這樣合成組件:

<div id="app1">  <navigation-link url="/profile">    Your Profile  </navigation-link></div>

然后你在 <navigation-link> 的模板中可能會寫為:

Vue.component('navigation-link', {    template: `      <a        v-bind:href="url" rel="external nofollow"         class="nav-link"      >      <slot></slot>      </a>    `  });

當組件渲染的時候,這個 <slot> 元素將會被替換為“Your Profile”。

插槽內可以包含任何模板代碼,包括 HTML:

<navigation-link url="/profile"> <!-- 添加一個 Font Awesome 圖標 --> <span class="fa fa-user"></span> Your Profile</navigation-link>

甚至其它的組件:

<navigation-link url="/profile"> <!-- 添加一個圖標的組件 --> <font-awesome-icon name="user"></font-awesome-icon> Your Profile</navigation-link>

如果 <navigation-link> 沒有包含一個 <slot> 元素,則任何傳入它的內容都會被拋棄。

2 具名插槽

有些時候我們需要多個插槽。例如,一個假設的 <base-layout> 組件多模板如下:

<div class="container"> <header>  <!-- 我們希望把頁頭放這里 --> </header> <main>  <!-- 我們希望把主要內容放這里 --> </main> <footer>  <!-- 我們希望把頁腳放這里 --> </footer></div>

對于這樣的情況,<slot> 元素有一個特殊的特性:name。這個特性可以用來定義額外的插槽:

<div class="container"> <header>  <slot name="header"></slot> </header> <main>  <slot></slot> </main> <footer>  <slot name="footer"></slot> </footer></div>

在向具名插槽提供內容的時候,我們可以在一個父組件的 <template> 元素上使用 slot 特性:

<base-layout> <template slot="header">  <h1>Here might be a page title</h1> </template> <p>A paragraph for the main content.</p> <p>And another one.</p> <template slot="footer">  <p>Here's some contact info</p> </template></base-layout>

另一種 slot 特性的用法是直接用在一個普通的元素上:

<base-layout> <h1 slot="header">Here might be a page title</h1> <p>A paragraph for the main content.</p> <p>And another one.</p> <p slot="footer">Here's some contact info</p></base-layout>

我們還是可以保留一個未命名插槽,這個插槽是默認插槽,也就是說它會作為所有未匹配到插槽的內容的統一出口。上述兩個示例渲染出來的 HTML 都將會是:

<div class="container"> <header>  <h1>Here might be a page title</h1> </header> <main>  <p>A paragraph for the main content.</p>  <p>And another one.</p> </main> <footer>  <p>Here's some contact info</p> </footer></div>

3 默認插槽的內容

有的時候為插槽提供默認的內容是很有用的。例如,一個 <submit-button> 組件可能希望這個按鈕的默認內容是“Submit”,但是同時允許用戶覆寫為“Save”、“Upload”或別的內容。

你可以在 <slot> 標簽內部指定默認的內容來做到這一點。

<button type="submit"> <slot>Submit</slot></button>

如果父組件為這個插槽提供了內容,則默認的內容會被替換掉。

4 編譯作用域

當你想在插槽內使用數據時,例如:

<navigation-link url="/profile"> Logged in as {{ user.name }}</navigation-link>

該插槽可以訪問跟這個模板的其它地方相同的實例屬性 (也就是說“作用域”是相同的)。但這個插槽不能訪問 <navigation-link> 的作用域。例如嘗試訪問 url 是不會工作的。牢記一條準則:

父組件模板的所有東西都會在父級作用域內編譯;子組件模板的所有東西都會在子級作用域內編譯。

5 作用域插槽

2.1.0+ 新增

有的時候你希望提供的組件帶有一個可從子組件獲取數據的可復用的插槽。例如一個簡單的 <todo-list> 組件的模板可能包含了如下代碼:

Vue.component('todo-list',{    template:`    <ul>      <li        v-for="todo in todos"        v-bind:key="todo.id">        {{ todo.text }}      </li>    </ul>    `  });

但是在我們應用的某些部分,我們希望每個獨立的待辦項渲染出和 todo.text 不太一樣的東西。這也是作用域插槽的用武之地。

為了讓這個特性成為可能,你需要做的全部事情就是將待辦項內容包裹在一個 <slot> 元素上,然后將所有和其上下文相關的數據傳遞給這個插槽:在這個例子中,這個數據是 todo 對象:

<ul> <li  v-for="todo in todos"  v-bind:key="todo.id" >  <!-- 我們為每個 todo 準備了一個插槽,-->  <!-- 將 `todo` 對象作為一個插槽的 prop 傳入。-->  <slot v-bind:todo="todo">   <!-- 回退的內容 -->   {{ todo.text }}  </slot> </li></ul>

現在當我們使用 <todo-list> 組件的時候,我們可以選擇為待辦項定義一個不一樣的<template> 作為替代方案,并且可以通過 slot-scope 特性從子組件獲取數據:

<todo-list v-bind:todos="todos">  <!--插槽作用域的名字是 slotProps-->  <template slot-scope="slotProps">    <!-- 為指定的待辦項定義一個模板-->    <span v-if="slotProps.todo.isComplete">✓</span>    {{ slotProps.todo.text }}  </template></todo-list>

在 2.5.0+,slot-scope 不再限制在 <template> 元素上使用,而可以用在插槽內的任何元素或組件上。

解構 slot-scope

如果一個 JavaScript 表達式在一個函數定義的參數位置有效,那么這個表達式實際上就可以被 slot-scope 接受。也就是說你可以在支持的環境下 單文件組件或現代瀏覽器),在這些表達式中使用 ES2015 解構語法。例如:

<todo-list v-bind:todos="todos"> <template slot-scope="{ todo }">  <span v-if="todo.isComplete">✓</span>  {{ todo.text }} </template></todo-list>

這會使作用域插槽變得更干凈一些。

希望本文所述對大家vue.js程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美视频专区一二在线观看| 亚洲欧美成人一区二区在线电影| 久久久久久久久久国产| 成人黄色在线免费| 亚洲精品自拍偷拍| 亚洲精品av在线播放| 日韩国产欧美区| 久久影院模特热| 中文字幕日韩有码| 久久天天躁狠狠躁夜夜av| 国产精品久久久久久久久久久久久久| 国内精久久久久久久久久人| 疯狂蹂躏欧美一区二区精品| 日韩女优在线播放| 少妇高潮 亚洲精品| 精品久久久久人成| 久久天天躁狠狠躁夜夜躁2014| 高跟丝袜一区二区三区| 国产精品久在线观看| 欧美激情一二区| 日韩激情片免费| 欧美国产一区二区三区| 一区二区三区国产视频| 亚洲欧美日韩国产中文专区| 国产日产亚洲精品| 国产精品久久久久久久久久99| 国产视频丨精品|在线观看| 亚洲欧美在线免费| 在线视频亚洲欧美| 亚洲精品国产精品国产自| 国内精品久久影院| 亚洲国产精久久久久久久| 欧美成人合集magnet| 色偷偷av一区二区三区| 日产精品99久久久久久| 国产亚洲精品一区二区| 欧美日韩电影在线观看| 97碰在线观看| 亚洲激情在线观看| 日韩有码在线观看| 欧美日韩国产页| 亚洲一区二区久久| 国产欧美一区二区白浆黑人| www日韩中文字幕在线看| 日韩精品极品毛片系列视频| 久久中文字幕在线视频| 在线播放日韩精品| 久久免费高清视频| 久久精品国产久精国产思思| 欧美一级高清免费| 国产丝袜一区二区| 欧美日韩亚洲激情| 亚洲一区二区三| 51色欧美片视频在线观看| 97成人精品视频在线观看| 久久精品免费播放| 欧美视频在线视频| 成人黄在线观看| 精品丝袜一区二区三区| 日韩av片永久免费网站| 一区二区在线视频播放| 91精品久久久久久久久中文字幕| 欧美在线视频观看| 国产精品男女猛烈高潮激情| 亚洲精品日韩激情在线电影| 国产精品对白刺激| 国产精品久久久久久久久久久久| 亚洲视频777| 国产精品永久免费视频| 96sao精品视频在线观看| 日韩精品亚洲视频| 992tv在线成人免费观看| 日韩中文在线观看| 国产精品99蜜臀久久不卡二区| 亚洲成色www8888| 激情亚洲一区二区三区四区| 日本高清+成人网在线观看| 国产精品一区二区女厕厕| 亚洲一区二区三区777| 97国产suv精品一区二区62| 亚洲成人激情小说| 亚洲激情中文字幕| 热久久视久久精品18亚洲精品| 日韩有码在线视频| 亚洲性av网站| 亚洲欧美变态国产另类| 国产日韩中文字幕在线| 美女啪啪无遮挡免费久久网站| 久久国产精品久久久久| 久久69精品久久久久久国产越南| 91久久在线视频| 日韩av综合中文字幕| 久久99久国产精品黄毛片入口| 日韩在线观看av| 日韩高清av一区二区三区| 日韩人体视频一二区| 久久久久久国产精品三级玉女聊斋| 久久国产精品久久久久久久久久| 日日噜噜噜夜夜爽亚洲精品| 久久久精品国产网站| 成人有码在线播放| 91青草视频久久| 97视频在线观看亚洲| 欧美性xxxxx极品| 亚洲成av人乱码色午夜| 欧美丝袜一区二区| 日韩视频一区在线| 久久精品国产一区二区电影| 亚洲人成在线观看| 91免费看视频.| 亚洲国产日韩精品在线| 国产精品久久久久久久久男| 亚洲精品综合久久中文字幕| 中文字幕亚洲第一| 欧美天堂在线观看| 亚洲在线一区二区| 久久精品91久久香蕉加勒比| 91chinesevideo永久地址| 久久久久久久色| 亚洲国产精品va在看黑人| 亚洲字幕一区二区| 日韩欧美在线第一页| 国产在线拍揄自揄视频不卡99| 2018国产精品视频| 日韩精品免费观看| 欧美午夜片在线免费观看| 国产成人在线一区二区| 夜夜嗨av一区二区三区免费区| 欧美黑人xxxⅹ高潮交| 国产精品福利在线观看网址| 国产91色在线|免| 久久偷看各类女兵18女厕嘘嘘| 色偷偷偷综合中文字幕;dd| 欧美国产中文字幕| 日韩人体视频一二区| 午夜精品久久久久久久男人的天堂| 欧美精品18videos性欧| 国产精品成人av性教育| 国产91对白在线播放| 91精品久久久久久综合乱菊| 欧美大片免费观看在线观看网站推荐| 亚洲午夜激情免费视频| 日韩成人xxxx| 亚洲精品aⅴ中文字幕乱码| 中文字幕国产亚洲2019| 亚洲一区亚洲二区亚洲三区| 清纯唯美亚洲激情| 亚洲影院污污.| 精品亚洲一区二区三区| 国产v综合v亚洲欧美久久| 亚洲欧美中文日韩在线v日本| 亚洲xxxx在线| 亚洲欧美日韩一区二区三区在线| 亚洲欧美一区二区三区情侣bbw| 国产精品爽黄69| 亚洲xxxx做受欧美| 8090成年在线看片午夜| 亚洲福利视频久久| 亚洲专区国产精品| 精品视频9999| 欧美一级黄色网| 精品国产一区二区三区四区在线观看| 久久精彩免费视频| 国产精品久久二区|