简述Vue的普通Slot以及作用域Slot的区别 ?

参考回答

  1. 普通 Slot
    普通 Slot 是 Vue 中的一个插槽机制,允许父组件在子组件的指定位置插入内容。父组件传递的内容会被插入到子组件模板中的 <slot></slot> 标签位置。

  2. 作用域 Slot
    作用域 Slot 是 Vue 中的高级插槽机制,父组件不仅可以插入内容到子组件中,还可以通过 slot-scopev-slot 向插槽提供数据。子组件可以通过这些数据动态地渲染插槽内容。

详细讲解与拓展

  1. 普通 Slot

    • 普通 Slot 是最基本的插槽机制。它允许父组件在子组件的模板中插入任意内容。这个内容会在子组件渲染时插入到 <slot> 标签所在的位置。
    • 例子
      
      <template>
      <child>
       <p>This is content passed to slot</p>
      </child>
      </template>
      
      <!-- 子组件 -->
      <template>
      <div>
       <slot></slot> <!-- 插槽位置 -->
      </div>
      </template>
      

      在这个例子中,父组件将 <p>This is content passed to slot</p> 传递给子组件,子组件的 <slot></slot> 标签会渲染父组件传递的内容。

  2. 作用域 Slot

    • 作用域 Slot 不仅允许父组件插入内容,还允许父组件访问从子组件传递的数据。子组件通过 v-slotslot-scope 向父组件暴露数据,父组件可以利用这些数据在插槽中进行动态渲染。
    • 例子
      
      <template>
      <div>
       <slot :message="childMessage"></slot> <!-- 向父组件传递数据 -->
      </div>
      </template>
      <script>
      export default {
      data() {
       return {
         childMessage: 'Hello from child'
       };
      }
      };
      </script>
      
      <!-- 父组件 -->
      <template>
      <child>
       <template v-slot:default="slotProps">
         <p>{{ slotProps.message }}</p> <!-- 使用子组件传递的数据 -->
       </template>
      </child>
      </template>
      

      在这个例子中,子组件通过 v-slot:default="slotProps" 向父组件传递了一个 message 数据,父组件可以通过 slotProps.message 来访问并展示这个数据。

  3. 区别

    • 普通 Slot:只负责内容插入,父组件只能插入内容,无法访问子组件的数据。
    • 作用域 Slot:父组件不仅可以插入内容,还可以访问子组件传递的数据,父组件根据子组件的数据动态渲染插槽内容。

总结

  • 普通 Slot:简单的插槽机制,父组件只能插入内容到子组件中。
  • 作用域 Slot:允许父组件通过 v-slotslot-scope 访问子组件的数据,从而实现更动态、灵活的插槽内容渲染。

发表评论

后才能评论