91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Vue插槽slot怎么使用

發布時間:2022-03-07 15:32:43 來源:億速云 閱讀:142 作者:iii 欄目:web開發

這篇文章主要講解了“Vue插槽slot怎么使用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Vue插槽slot怎么使用”吧!

一、插槽的含義

插槽 slot 是寫在子組件的代碼中,供父組件使用的占位符。在代碼中,大致寫為如下的形式,后面會進行詳細的寫法介紹。

<slot> </slot>

插槽其實就是在寫 slot 的地方挖個坑,等著組件的使用者,即父組件,進行填充。子組件中使用插槽 slot 后,父組件可以在這個占位符中填充內容,包括數據、html代碼、組件等,也就是說,當子組件的某部分內容是根父組件填充的不同而變化的,那我們就可以使用插槽slot,具體填充什么,由父組件而定。

讓父組件向子組件指定位置插入html結構,也是一種組件間通信的方式,適用于父組件 => 子組件

話不多說,下面,我們就來看看 slot 的具體如何使用吧!

二、插槽的三種使用方法

1.默認插槽

有兩個組件,App是父組件,Child是子組件

父組件代碼如下:

<template>

  <div class="parent">

    <span>我是父組件</span>

    <Child></Child>

  </div>

</template>

<script>

import Child from './components/Child'

export default {

  name:'app',

  components:{

    Child

  }

}

</script>

<style scoped>

.parent{

  width: 400px;

  height: 400px;

  background-color: #bfa;

}

</style>

子組件的代碼:

<template>

  <div class="child">

    <div>我是子組件</div>

    <br>

    <slot>我是默認插槽,當父組件不填充任何內容時,我這句話才會出現</slot>

  </div>

</template>

<script>

export default {

  name:'Child',

  data() {

    return {

    }

  },

};

</script>

<style>

.child {

  width: 200px;

  height: 200px;

  background-color: lightblue;

  margin: auto;

}

</style>

啟動項目,在瀏覽器中顯示:

 這時候,我們已經使用 slot ,在子組件中占了一個坑,但是我們還沒有填充內容,接下來填充內容:

 可以看到,填充的內容,確實在子組件中顯示

假如,我們去掉子組件的插槽,父組件在子組件填充的內容還能看到嗎?我們來試一試:

可以看到:瀏覽器中,只顯示兩個組件原本的信息,父組件填充的內容是看不到的。

在 slot 中,不僅可以填充文字,也可以填充圖片、視頻、HTML結構等,如填充圖片:

瀏覽器中顯示如下: 

2.具名插槽

具名插槽,顧名思義,就是帶有名字的插槽,具有 name 屬性,一個不帶 name 的 <slot> 會帶有默認的名字 default 。

在子組件中,slot 指定 name 屬性

<template>

  <div class="child">

    <div>我是子組件</div>

    <br>

    <slot name="content">

      我是插槽默認的內容,當父組件不填充任何內容時,我這句話才會出現

    </slot>

  </div>

</template>

<script>

export default {

  name:'Child',

  data() {

    return {

    }

  },

};

</script>

<style>

.child {

  width: 200px;

  height: 200px;

  background-color: lightblue;

  margin: auto;

}

</style>

在父組件中,需要使用 template ,在 template 模板中,指定 slot 在子組件中的 name 值

<template>

  <div class="parent">

    <span>我是父組件</span>

    <Child>

      <template slot="content">

        <div>這是父組件在子組件中填充的內容,在子組件中顯示</div>

        <br />

        <img src="https://cache.yisu.com/upload/information/20220117/488/17823.jpg" alt="" />

      </template>

    </Child>

  </div>

</template>

<script>

import Child from "./components/Child";

export default {

  name: "app",

  components: {

    Child,

  },

};

</script>

<style scoped>

.parent {

  width: 400px;

  height: 400px;

  background-color: #bfa;

}

img {

  width: 200px;

}

</style>

 瀏覽器可以正常顯示填充的內容:

 假如,我們在父組件中,只寫了 template ,并沒有指定 slot 在子組件中的 name 值,

 那么,瀏覽器中:

 也就是說,在引用子組件的代碼中, template 中的slot 是根據等號 = 后面的值,來尋找對應的插槽 slot ,從而在對應的位置上,填充相應的內容。當我們使用的插槽數量比較多時,具名插槽就有很大的實用性。

3.作用域插槽

 如果數據在子組件,可以在子組件中直接使用數據,但根據數據生成的結構需要組件的使用者來決定,我們就需要用到作用域插槽,同時,我們也可以實現多種結構。

例如:games數據在子組件中,但使用數據所遍歷出來的結構由父組件App決定

子組件中,使用 <slot :games="games"> 指明使用什么數據,并將數據傳給插槽的使用者

<template>

  <div class="child">

    <span>我是子組件</span>

    <h6>{{title}}</h6>

    <slot :games="games">

      我是插槽默認的內容,當父組件不填充任何內容時,我這句話才會出現

    </slot>

  </div>

</template>

<script>

export default {

  name:'Child',

  props:['title'],

  data() {

    return {

      games:['紅色警戒','穿越火線','超級瑪麗'],

    }

  },

};

</script>

<style>

.child {

  width: 200px;

  height: 200px;

  background-color: lightblue;

  margin: auto;

}

</style>

 在父組件中,使用子組件通過插槽傳遞過來的數據,渲染結構,有3種形式:

<template>

  <div class="parent">

    <span>我是父組件</span>

    <Child title="游戲1">

<template scope="youxi1">

        <!-- 無序列表結構 -->

<ul>

<li style="color:red" v-for="(g,index) in youxi1.games" :key="index">{{g}}</li>

</ul>

</template>

</Child>

    <hr>

    <Child title="游戲2">

      <template slot-scope="youxi2">

        <!-- 有序列表結構 -->

        <ol>

          <li v-for="(g,index) in youxi2.games" :key=index>{{g}}</li>

        </ol>  

      </template>

    </Child>

    <hr>

    <Child title="游戲3">

      <template scope="{games}">

        <!-- h5結構 -->

        <h6 v-for="(g,index) in games" :key=index>{{g}}</h6>

      </template>

    </Child>

    <hr>

  </div>

</template>

<script>

import Child from "./components/Child";

export default {

  name: "app",

  components: {

    Child,

  },

};

</script>

<style scoped>

.parent {

  width: 400px;

  height: 700px;

  background-color: #bfa;

}

img {

  width: 200px;

}

</style>

瀏覽器中:

 第1種:是基本用法,使用 scope = "  youxi1 ",youxi1 是自定義的變量,來接收子組件傳過來的數據,它是一個對象,使用插值語法,把 youxi1 打印出來:

 第2種:將 scope 替換為 slot-scope

第3種:使用 es6 解構賦值的方法,直接將對象數據解構為數組,然后進行 v-for 的遍歷

上述的小案例,就實現了:使用同樣的數據,父組件將其渲染成不同的結構,非常方便實用。 

4.版本變化

 Vue 2.6.0 起,引入了 v-slot ,上文提到了3類插槽的 slot 和 slot-scope ,可以直接替換為 v-slot ,在vue2版本中,我們仍可以使用 slot 和 slot-scope ,但是在vue3中就只能使用v-slot了。詳細內容參見 vue官方文檔 的解釋。

感謝各位的閱讀,以上就是“Vue插槽slot怎么使用”的內容了,經過本文的學習后,相信大家對Vue插槽slot怎么使用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

哈巴河县| 武川县| 来凤县| 莱州市| 武威市| 苗栗县| 惠水县| 休宁县| 大同县| 龙门县| 宝应县| 芦山县| 深泽县| 鄄城县| 嘉义市| 吉水县| 新兴县| 乌鲁木齐县| 进贤县| 吉木乃县| 祁门县| 东兴市| 阳曲县| 东海县| 大英县| 从江县| 饶平县| 柳州市| 寿宁县| 东港市| 徐水县| 师宗县| 焦作市| 康保县| 广元市| 梁山县| 鄂伦春自治旗| 格尔木市| 浏阳市| 高清| 竹溪县|