插槽的基本使用和作用域插槽

1.编译作用域

父级模板里的所有内容都是在父级作用域中编译的;子模板里的所有内容都是在子作用域中编译的。

即父子组件只能使用各自作用域的数据

2.插槽的后备内容(slot中默认配置内容)

可以在slot中提前设置一段内容作为默认值,当父组件提供插槽内容时将会被覆盖

<!--父组件 -->
<pop-cart class="pop-cart" ></pop-cart>
    <!--子组件-->
<slot name="cartPop">
      这是子组件插槽的默认内容
    </slot>

以下会被覆盖

      <pop-cart ref="popCart" class="pop-cart" >
        <template v-slot:cartPop>
          这是父组件插槽内容
        </template>
      </pop-cart>

3.vm.$slots  API 的形式获取子组件插槽内容

vm.$slots用来访问被插槽分发的内容。(在父组件中获取子组件的虚拟DOM)

插槽没有命名时:v-slot:default获取所有子组件插槽的实例。如:this.$refs.child.$slots()

插槽有名字时:v-slot:name

<template>
<!-- BlogPost.vue -->
<div>
    <slot name="header"></slot>
    <slot></slot>
    <slot name="footer"></slot>

</div>
</template>
<blog-post>
  <template v-slot:header>
    <h1>About Me</h1>
  </template>

  <p>Here's some page content, which will be included in vm.$slots.default, because it's not inside a named slot.</p>

  <template v-slot:footer>
    <p>Copyright 2016 Evan You</p>
  </template>

  <p>If I have some content down here, it will also be included in vm.$slots.default.</p>.
</blog-post>

<script>
import Vue from 'vue'
Vue.component('blog-post', {
  render: function (createElement) {
    var header = this.$slots.header
    var body   = this.$slots.default
    var footer = this.$slots.footer
    return createElement('div', [
      createElement('header', header),
      createElement('main', body),
      createElement('footer', footer)
    ])
  }
})
</script>

4.作用域插槽

作用域插槽能够实现在父组件中获取子组件的数据

当前插槽绑定数据<slot :user="user" name="userCard">

父组件中通过<template v-slot:userCard="user">{{user}}</template>进行获取和使用

  v-slot:default默认插槽

  v-slot:header具名插槽

实际应用场景:

elementUI表格按钮中获取父组件中的数据,再传入按钮中

<!-- 子组件 -->
<span>
  <slot :user="user">
    {{ user.lastName }}
  </slot>
</span>
<!-- 父组件中 -->
<current-user>
  <template v-slot:default="slotProps">
    {{ slotProps.user.firstName }}
  </template>
</current-user>

插槽作用域是指在Vue组件中,插槽可以接受来自父组件的数据,并在模板中使用这些数据。通过插槽作用域,我们可以将父组件的数据传递给插槽内部,实现数据的动态渲染。 作用域插槽是指在定义插槽时,可以将插槽对应的数据传递给子组件,并在子组件中根据该数据进行渲染。作用域插槽通过在插槽中添加一个属性,将父组件的数据传递到插槽内部,然后在子组件中使用这个属性来渲染内容。这样,我们可以在父组件中动态地向子组件插入不同的内容。 总结起来,插槽作用域作用域插槽Vue组件中的两个重要概念。插槽作用域允许父组件向插槽传递数据,而作用域插槽则允许子组件接收并使用这些数据来渲染内容。这样的设计使得组件之间的数据传递更加灵活和可控。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Vue匿名插槽作用域插槽的合并和覆盖行为](https://download.csdn.net/download/weixin_38659622/12943692)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Vue作用域插槽实现方法及作用详解](https://download.csdn.net/download/weixin_38641150/12925203)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [浅析vue插槽作用域插槽的理解](https://download.csdn.net/download/weixin_38743372/12943719)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值