Vue
在講組件時,建議最好不要在父做用域中傳值給子組件,不知道爲何用slot
;html
slot
背景爲何要用slot
?vue
我的理解:數組
slot
分類slot
默認的slot
是指那些在調用組件時,沒有指定slot
屬性的嵌套子節點。this
示例:spa
<defined-component> <div>這是默認的slot節點</div> <div slot="definedSlot">這是命名的slot節點</div> </defined-component>
DefinedComponent.vue
邏輯代碼中,能夠使用this.$slots.default
來獲取默認的Array([VNode])
:數組第一項便是封裝<div>這是默認的slot節點</div>
的VueNode對象。DefinedComponent.vue
文件中,能夠使用<slot></slot>
來承接默認的slot
://DefinedComponent.vue <template> <div> ... <slot></slot> ... </div> </template>
slot
命名的slot
是指那些在調用組件時,指定slot
屬性的嵌套子節點。code
示例:component
<defined-component> <div slot="definedSlot">這是命名的slot節點</div> </defined-component>
DefinedComponent.vue
邏輯代碼中,能夠使用this.$slots.definedSlot
來獲取命名的Array([VNode])
。DefinedComponent.vue
文件中,能夠使用<slot name="definedSlot"></slot>
來承接命名的slot
。//DefinedComponent.vue <template> <div> ... <slot name="definedSlot"></slot> ... </div> </template>
slot
的應用組件內須要根據所在上下文提供嵌套子節點,且須要設置缺省值的時候,能夠查看如下示例:htm
view/index.vue對象
<template> ... <navigation-bar :refresh="refresh"></navigation-bar> ... </template>
components/Navigation.vue圖片
<template> <header class="navigation_bar"> <button @click="goBack" class="navigation_back"> <span v-if="!hasTitle" class="back_tip">關閉</span> </button> <h2 v-if="hasTitle" class="navigation_title">{{title}}</h2> <slot> <!--缺省的嵌套子節點,如有默認的slot存在,則再也不渲染缺省的子節點--> <button class="refresh" @click="onRefresh">刷新</button> </slot> </header> </template>
slot
按照預約的坑位填坑。
view/index.html
<template> ... <null> <div slot="null">會被Null組件中的slot[name="null"]承接</div> <div slot="network">會被Null組件中的slot[name="network"]承接</div> </null> ... </template>
components/Null.vue
<template> <div class="data-null"> <nav> <slot name="null"></slot> </nav> <nav class="network-error"> <slot name="network"></slot> </nav> </div> </template>