vue的插槽

前言

插槽在使用vue开发项目中的使用频率仍是挺高的,无论是自定义组件仍是引用的UI组件库,插槽的使用能够必定程度上提示组件的可拓展性等。vue

1、具名插槽

使用场景:单纯的想在父组件内自定义子组件的内容结构。api

// 父组件App
<template>
  <div id="app">
    <my-slot>
      {{value}}
    </my-slot>
  </div>
</template>

<script>
import MySlot from './components/MySlot.vue'
export default {
  name: 'app',
  data() {
    return {
      value: 'hello world'
    }
  },
  components: {
    MySlot
  }
}
</script>

// 子组件MySlot
<template>
    <div>
        <slot></slot>
    </div>
</template>
复制代码

2、做用域插槽

使用场景:更改子组件对应做用域的内容。bash

// 父组件App
<template>
  <div id="app">
    <my-slot>
      <template v-slot:mySlot>
        <div>
          {{value}}
        </div>
      </template>
    </my-slot>
  </div>
</template>

<script>
import MySlot from './components/MySlot.vue'
export default {
  name: 'app',
  data() {
    return {
      value: 'hello world'
    }
  },
  components: {
    MySlot
  }
}
</script>

// 子组件MySlot
<template>
    <div>
        <slot name='mySlot'></slot>
    </div>
</template>
复制代码

3、子组件经过做用域插槽传递参数到父组件

使用场景:须要在父组件自定义内容中使用子组件的数据。app

// 父组件App
<template>
  <div id="app">
    <my-slot>
      <template v-slot:mySlot='{childValue, one}'>
        <div>
          {{value}}
          {{childValue}}
          {{one}}
        </div>
      </template>
    </my-slot>
  </div>
</template>

<script>
import MySlot from './components/MySlot.vue'
export default {
  name: 'app',
  data() {
    return {
      value: 'hello world'
    }
  },
  components: {
    MySlot
  }
}
</script>

// 子组件MySlot
<template>
    <div>
        <slot name='mySlot' :childValue='childValue' :one='one'></slot>
    </div>
</template>

<script>
export default {
    name: 'MySlot',
    data() {
        return {
            childValue: 'It is child value',
            one: 'one'
        }
    }
}
</script>
复制代码

后话

vue@2.6.0版本废弃了slot、slot-scope,都推荐使用v-slot,具体能够前往cn.vuejs.org/v2/api/?#sl…查看更多详细内容。ui

相关文章
相关标签/搜索