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>