vue的插槽

文章详细介绍了Vue中如何使用插槽进行内容分发,以及插槽的作用域规则。在子组件中定义插槽,父组件可以提供内容,但不能直接访问子组件的数据。示例展示了如何在父组件模板中通过v-slot访问插槽属性,并动态渲染列表。同时,文章强调了每个模板表达式只能访问其所在组件的作用域。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

子组件挖坑 :<slot> 元素是一个插槽出口

父组件中萝卜:父元素提供的插槽内容 (slot content) 将在哪里被渲染

作用域:

插槽内容无法访问子组件的数据。Vue 模板中的表达式只能访问其定义时所处的作用域

父组件模板中的表达式只能访问父组件的作用域;子组件模板中的表达式只能访问子组件的作用域。

插槽使用子组件的数据

子组件:

<div> <slot :text="greetingMessage" :count="1"></slot> </div>

父组件

<MyComponent v-slot="slotProps"> {{ slotProps.text }} {{ slotProps.count }} </MyComponent>

App.vue

<script>
// 第一步 引入组件
import Content from './components/Content.vue'
export default {
  data() {
    return {
      message: 'helloworld'
    }
  },
  //  第二步 组件暴露给模板 进行注册
  components: {
    Content
  },

}
</script>
<template>
  <Content><button>测试slot</button></Content>
  <Content><input type="text" /></Content>
  <Content><button>测试slot</button><input type="text" /></Content>


  <!-- v-slot 只能添加在template上 -->
  <!-- 父组件模板中的表达式只能访问父组件的作用域;子组件模板中的表达式只能访问子组件的作用域 -->
  <Content>
    <!-- <template v-slot:button>
      <button>测试slot{{ message }}</button>
    </template>
    <template v-slot:input>
      <input type="text" v-model="message" />
    </template>
    <template v-slot:h2 v-slot:default="slotPrors">
      <h2>{{slotPrors.list}}</h2>
    </template> -->
    <template  v-slot:test="slotProps" >
      <ul>
        <li v-for="item in slotProps.list" :key="item">{{item}}</li>
      </ul>
      <!-- <h2>{{slotPrors.list}}</h2> -->
    </template>
  </Content>
  <Content>
    <template v-slot:test="slotProps">
      <ol>
        <li v-for="item in slotProps.list" :key="item">{{ item }}</li>
      </ol>

    </template>
  </Content>
</template>

Content.vue

<template>
    <h2>我是content组件 子组件message:{{ message }}</h2>
    <div>
        <!-- 备用内容没有提供内容时,默认渲染 -->
        <!-- <slot name="button"><button>默认按钮</button></slot>
        <slot name="input"></slot>
        <slot name="h2" :list="list"></slot> -->
        <slot :list="list" name="test">
        </slot> 
    </div>
</template>
<script>
export default {
    data() {
        return {
            message: '你好',
            list:[12,32,43,3]
        }
    }
}
</script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值