uni-app slot动态绑定name问题

发布于 1周前 作者 itying888 来自 Uni-App

uni-app slot动态绑定name问题

开发环境 版本号 项目创建方式
Windows win11 HBuilderX

产品分类:

uniapp/小程序/微信

示例代码:

<script>  
export default {  
  data() {  
    return {  
      items: []  
    }  
  },  
  mounted() {  
    this.items = [  
      { name:"item1" },  
      { name:"item2" },  
      { name:"item3" },  
      { name:"item4" },  
      { name:"item5" },  
    ]  
  }  
}  
</script>  

<template>  
  <ul>  
    <li v-for="(item,index) in items">  
      <slot v-if="index === 1" :name="item.name" :item="item"></slot>  
      <slot v-else:name="item.name" :item="item">  
        other item {{item.name}}  
      </slot>  
    </li>  
  </ul>  
</template>  

<style scoped>  
  ul {  
    list-style-type: none;  
    padding: 5px;  
    background: linear-gradient(315deg, #42d392 25%, #647eff);  
  }  
  li {  
    padding: 5px 20px;  
    margin: 10px;  
    background: #fff;  
  }  
</style>
<script>  
import zmTable from '@/components/zm-table/zm-table'  

export default {  
  components: {  
    zmTable  
  }  
}  
</script>  

<template>  
  <zm-table>  
    <template #item2="{ item }">  
      <div class="item">  
       xxx {{ item.name }}  
      </div>  
    </template>  
  </zm-table>  
</template>  

<style scoped>  
.meta {  
  font-size: 0.8em;  
  color: #42b883;  
}  
</style>

2 回复

uni-app 中,slot 是用于在组件中插入内容的一种机制。通常情况下,slotname 是静态的,但有时你可能需要动态地绑定 slotname。这可以通过 v-slot 指令和动态绑定的方式来实现。

动态绑定 slotname

假设你有一个组件 MyComponent,并且你想根据某个变量动态地决定使用哪个 slot,你可以这样做:

<template>
  <MyComponent>
    <template v-slot:[dynamicSlotName]>
      <!-- 这里是你想要插入的内容 -->
      <p>This is dynamic slot content</p>
    </template>
  </MyComponent>
</template>

<script>
export default {
  data() {
    return {
      dynamicSlotName: 'header' // 你可以根据需要动态改变这个值
    };
  }
};
</script>

解释

  1. v-slot:[dynamicSlotName]: 这里使用了动态绑定的语法 :[dynamicSlotName],它会根据 dynamicSlotName 的值来决定使用哪个 slot

  2. dynamicSlotName: 这是一个数据属性,你可以根据需要动态地改变它的值,比如从 'header' 改为 'footer',从而动态地切换 slot

示例

假设 MyComponent 组件定义如下:

<template>
  <div>
    <slot name="header"></slot>
    <slot name="footer"></slot>
  </div>
</template>
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!