最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue插槽原理與用法詳解

 更新時間:2019年03月05日 10:58:00   作者:deniro_li  
這篇文章主要介紹了Vue插槽原理與用法,結合實例形式詳細分析了vue.js插槽內(nèi)容、具名插槽、作用域插槽等相關原理與使用方法,需要的朋友可以參考下

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

1 插槽內(nèi)容

Vue 實現(xiàn)了一套內(nèi)容分發(fā)的 API,這套 API 基于當前的 Web Components 規(guī)范草案,將 <slot> 元素作為承載分發(fā)內(nèi)容的出口。

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

<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”。

插槽內(nèi)可以包含任何模板代碼,包括 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> 元素,則任何傳入它的內(nèi)容都會被拋棄。

2 具名插槽

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

<div class="container">
 <header>
  <!-- 我們希望把頁頭放這里 -->
 </header>
 <main>
  <!-- 我們希望把主要內(nèi)容放這里 -->
 </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>

在向具名插槽提供內(nèi)容的時候,我們可以在一個父組件的 <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>

我們還是可以保留一個未命名插槽,這個插槽是默認插槽,也就是說它會作為所有未匹配到插槽的內(nèi)容的統(tǒng)一出口。上述兩個示例渲染出來的 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 默認插槽的內(nèi)容

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

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

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

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

4 編譯作用域

當你想在插槽內(nèi)使用數(shù)據(jù)時,例如:

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

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

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

5 作用域插槽

2.1.0+ 新增

有的時候你希望提供的組件帶有一個可從子組件獲取數(shù)據(jù)的可復用的插槽。例如一個簡單的 <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 不太一樣的東西。這也是作用域插槽的用武之地。

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

<ul>
 <li
  v-for="todo in todos"
  v-bind:key="todo.id"
 >
  <!-- 我們?yōu)槊總€ todo 準備了一個插槽,-->
  <!-- 將 `todo` 對象作為一個插槽的 prop 傳入。-->
  <slot v-bind:todo="todo">
   <!-- 回退的內(nèi)容 -->
   {{ todo.text }}
  </slot>
 </li>
</ul>

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

<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> 元素上使用,而可以用在插槽內(nèi)的任何元素或組件上。

解構 slot-scope

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

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

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

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

相關文章

  • 關于vue-cli-service:command?not?found報錯引發(fā)的實戰(zhàn)案例

    關于vue-cli-service:command?not?found報錯引發(fā)的實戰(zhàn)案例

    這篇文章主要給大家介紹了關于vue-cli-service:command?not?found報錯引發(fā)的相關資料,文中通過實例代碼將解決的過程介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2023-02-02
  • Vue3中使用styled-components的實現(xiàn)

    Vue3中使用styled-components的實現(xiàn)

    本文主要介紹了Vue3中使用styled-components的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-05-05
  • Vue2?中自定義圖片懶加載指令?v-lazy實例詳解

    Vue2?中自定義圖片懶加載指令?v-lazy實例詳解

    這篇文章主要為大家介紹了Vue2?中自定義圖片懶加載指令?v-lazy實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • 從Element日期組件源碼中學到的兩個工具方法技巧

    從Element日期組件源碼中學到的兩個工具方法技巧

    這篇文章主要介紹了從Element日期組件源碼中學到的兩個工具方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • 關于Vue?"__ob__:Observer"屬性的解決方案詳析

    關于Vue?"__ob__:Observer"屬性的解決方案詳析

    在操作數(shù)據(jù)的時候發(fā)現(xiàn),__ob__: Observer這個屬性出現(xiàn)之后,如果單獨拿數(shù)據(jù)的值,就會返回undefined,下面這篇文章主要給大家介紹了關于Vue?"__ob__:Observer"屬性的解決方案,需要的朋友可以參考下
    2022-11-11
  • vue?跳轉頁面$router.resolve和$router.push案例詳解

    vue?跳轉頁面$router.resolve和$router.push案例詳解

    這篇文章主要介紹了vue?跳轉頁面$router.resolve和$router.push案例詳解,這樣實現(xiàn)了既跳轉了新頁面,又不會讓后端檢測到頁面鏈接不安全之類的,需要的朋友可以參考下
    2023-10-10
  • Vue報錯:Uncaught TypeError: Cannot assign to read only property’exports‘ of object’#<Object>‘的解決方法

    Vue報錯:Uncaught TypeError: Cannot assign to read only propert

    這篇文章主要給大家介紹了關于Vue報錯:Uncaught TypeError: Cannot assign to read only property 'exports' of object '#<Object>' 的解決方法,文中介紹的非常詳細,需要的朋友們下面來一起看看吧。
    2017-06-06
  • vue中@click和@click.native.prevent的區(qū)別

    vue中@click和@click.native.prevent的區(qū)別

    這篇文章主要介紹了vue中@click和@click.native.prevent的區(qū)別,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • Vue-cli3 $ is not defined錯誤問題及解決

    Vue-cli3 $ is not defined錯誤問題及解決

    這篇文章主要介紹了Vue-cli3 $ is not defined錯誤問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • vite項目配置less全局樣式的實現(xiàn)步驟

    vite項目配置less全局樣式的實現(xiàn)步驟

    最近想實現(xiàn)個項目,需要配置全局less,本文主要介紹了vite項目配置less全局樣式的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧
    2024-02-02

最新評論

海伦市| 屏边| 富民县| 辉县市| 昌黎县| 灵石县| 招远市| 连州市| 耒阳市| 昌黎县| 凤凰县| 宁海县| 任丘市| 仁寿县| 鄯善县| 钦州市| 滦平县| 洞头县| 化州市| 栾城县| 双牌县| 赤壁市| 香港 | 利辛县| 康马县| 武汉市| 永靖县| 集贤县| 奉化市| 吴桥县| 桐城市| 临漳县| 罗城| 黑水县| 巴中市| 鱼台县| 平顶山市| 湟源县| 年辖:市辖区| 惠安县| 乌拉特后旗|