uniapp中slot和v-for的使用方法

在uniapp中,如何在组件内同时使用slot和v-for实现动态内容渲染?比如我有一个列表组件,需要通过v-for循环渲染数据,但同时希望某些循环项能插入自定义内容。具体应该怎么处理slot的作用域和v-for的循环逻辑?能否提供代码示例说明两者的配合用法?

2 回复

uniapp中slot用于组件内容分发,v-for用于列表渲染。在自定义组件内使用<slot>占位,父组件传入内容。v-for写法:<view v-for="(item, index) in list" :key="index">{{item}}</view>。注意:slot不支持v-for直接循环,需在外层包裹元素。


在 UniApp 中,slotv-for 是常用的 Vue.js 特性,用于组件插槽和列表渲染。以下是它们的使用方法:

1. Slot(插槽)

  • 作用:允许父组件向子组件传递内容,增强组件复用性。
  • 使用方法
    • 默认插槽:在子组件中定义 <slot></slot>,父组件传入内容。
    • 具名插槽:使用 name 属性定义多个插槽,父组件通过 v-slot 指定内容。

示例代码

  • 子组件 Child.vue
    <template>
      <view>
        <slot name="header"></slot>
        <slot></slot> <!-- 默认插槽 -->
        <slot name="footer"></slot>
      </view>
    </template>
    
  • 父组件使用:
    <template>
      <Child>
        <template v-slot:header>头部内容</template>
        <view>默认插槽内容</view>
        <template v-slot:footer>底部内容</template>
      </Child>
    </template>
    

2. v-for

  • 作用:基于数据循环渲染列表,常用于动态生成元素。
  • 使用方法:使用 v-for="item in list" 遍历数组,可结合 :key 提高性能。

示例代码

<template>
  <view>
    <view v-for="(item, index) in list" :key="index">
      {{ item.name }}
    </view>
  </view>
</template>

<script>
export default {
  data() {
    return {
      list: [
        { name: '项目1' },
        { name: '项目2' }
      ]
    }
  }
}
</script>

结合使用

  • 可在 slot 中使用 v-for 动态渲染插槽内容。
  • 示例:父组件传递列表数据到子组件的插槽中,子组件用 v-for 渲染。

注意事项

  • 使用 v-for 时务必添加 :key,避免渲染问题。
  • 插槽内容在父组件中编译,作用域为父组件数据。

以上方法在 UniApp 中与 Vue.js 一致,适用于 H5、小程序等平台。

回到顶部