【Vue.js】之插槽slot

【Vue.js】之插槽slot

插槽Slot是Vue提出来的一个概念,正如名字一样,插槽用于决定所携带的内容,插入到指定的某个位置,从而使模板分块,因而具有模块化的特质和更大的重用性。

将元素作为承载分发内容的出口。可以理解为模板中的占位符,在实例化是用自定义标签替代

  • 基本使用
  • 作用域插槽
  • 具名插槽

1.Index.vue

<template>
  <div>
      <p>vue高级特性</p>
      <hr>
      <!-- slot -->
      <Slot :url="website.url">
          {{website.title}}
      </Slot>
  </div>
</template>

<script>
import CustomVModel from './VModel'
import Slot from './Slot'
export default {
  components: {
    Slot
  },
  data () {
    return {
      name: '夹心',
      website: {
        url: 'http://imooc.com/',
        title: 'imooc',
        subTitle: '程序员的梦工厂'
      }
    }
  }
}
</script>

<style>

</style>

Slot.vue

<template>
  <a :href="url">
      <slot>
        默认内容, 即父组件没有设置内容时,这里显示
      </slot>
  </a>
</template>

<script>
export default {
  props: ['url'],
  data () {
    return {}
  }
}
</script>

<style>

</style>

作用域插槽

<template>
  <div>
      <p>vue高级特性</p>
      <hr>
      <!-- scoped slots -->
      <ScopedSlots :url = "website.url">
          <template v-slot = "slotProps">
              {{slotProps.slotData.title}}
          </template>
      </ScopedSlots>
  </div>
</template>

<script>
import ScopedSlots from './ScopedSlot'
export default {
  components: {
    ScopedSlots
  },
  data () {
    return {
      name: '夹心',
      website: {
        url: 'http://imooc.com/',
        title: 'imooc',
        subTitle: '程序员的梦工厂'
      }
    }
  }
}
</script>

<style>

</style>

ScopedSlot.vue

<template>
  <a :href="url">
      <slot :slotData = "website">
        {{website.subTitle}}
      </slot>
  </a>
</template>

<script>
export default {
  props: ['url'],
  data () {
    return {
      website: {
        url: 'http://wangEditor.com/',
        title: 'wangEditor',
        subTitle: '轻量级富文本编辑器'
      }
    }
  }
}
</script>

<style>

</style>

具名插槽

Index.vue

<!-- NamedSlot -->
      <NamedSlot>
        <template v-slot:header>
            <h1>将插入 header slot 中</h1>
        </template>
        <p>将插入main slot中, 即未命名的slot</p>
        <template v-slot:footer>
            <h1>将插入 footer slot 中</h1>
        </template>
      </NamedSlot>

NamedSlot.vue

<template>
 <div class="container">
   <header>
     <slot name = "header"></slot>
   </header>
   <main>
     <slot></slot>
   </main>
   <footer>
     <slot name = "footer"></slot>
   </footer>
 </div>
</template>
上一篇:ROS安装的完整过程以及rosdep init出现的rosdep init command not found以及website down 解决


下一篇:基于SSM的网上书店商城设计与实现毕业论文+开题报告+自述报告+答辩记录+答辩PPT+项目源码及数据库