vue学习之插槽

插槽

插槽(Slot)是Vue提出来的一个概念,正如名字一样,插槽用于决定将所携带的内容,插入到指定的某个位置,从而使模板分块,具有模块化的特质和更大的重用性。

个人理解:我感觉插槽就是父组件控制插槽的内容。他是用什么标签展示的,以及他要展示的内容。子组件来控制插槽插入的位置。

插槽的分类:插槽分为三种。匿名插槽,具名插槽,还有作用域插槽

匿名插槽:也就是默认插槽。把父组件中的内容默认插入到子组件的中<slot></slot>只的位置。

下面是展示在页面中的效果

具名插槽: 具名插槽会把就是子组件会把他的每个插槽都赋予一个名字(name)。然后子组件会根据父组件中所携带的指令参数来把父组件中的内容插入到相应的位置。

如果slot插槽没有给名字,那么这个插槽就相当于默认插槽,父组件中v-slot不传参的值就会插入到这里。

// 这是父组件
<div class="father">
    <p>我是父组件</p>
    <!-- 引入子组件 -->
    <basepage>
      <template v-slot:header>
        <!-- 放入要插入在子组件中的内容 -->
        <p class="con">我是父组件插入的header内容</p>
        <br>
      </template>
      <template v-slot:footer>
        <!-- 放入要插入在子组件中的内容 -->
        <p class="con">我是父组件插入的footer内容</p>
      </template>
      <P>我是父组件中不携带参数的那个</P>
      <br>
    </basepage>
  </div>

//这是子组件

  <template>
    <div class="son">
      <p>我是子组件</p>
      <br>
      <p>下面是父组件插入的内容:</p>
      <br>
      <template>
        <!-- v-slot中参数为header的将插入这里 -->
        <slot name="header"></slot>
        <!-- 父组件中不传递参数的将插入这里 -->
        <slot ></slot>
        <!-- v-slot中参数为footer的将插入这里 -->
        <slot name="footer"></slot>
      </template>
    </div>
  </template>

展示的效果

作用域插槽:实现父组件可以访问子组件里面的数据

用通俗的话来讲就是父组件替换子组件当中的标签,但是内容由子组件来提供。

// 父组件哈
<div class="father">
    <p>我是父组件</p>
    <!-- 引入子组件 -->
    <basepage>
      <template  v-slot=‘news‘>
        <!-- 放入要插入在子组件中的内容 -->
        <p class="con">我是父组件插入的footer内容</p>
        <br>
        <p>我是子组件中的内容:{{news.info}}</p>
      </template>
    </basepage>
  </div>

// 子组件
<template>
  <div class="son">
    <p>我是子组件</p>
    <br>
    <p>下面是父组件插入的内容:</p>
    <br>
    <template>
      <slot :info=‘message‘></slot>
    </template>
  </div>
</template>
<script>
export default {
  name:‘basepage‘,
  data() {
    return {
      message:"加油呀"
    }
  }
}

补充一些特殊的情况

补充一:我们可以在子组件中的slot中写入一些标签,如果父组件中没有写入标签时,那么就默认展示子组件中的把标签及内容,

// 父组件
<div class="father">
    <p>我是父组件</p>
    <!-- 引入子组件 -->
    <basepage>
    </basepage>
  </div>

// 子组件

<template>
  <div class="son">
    <p>我是子组件</p>
    <br>
    <p>下面是父组件插入的内容:</p>
    <br>
    <template>
      <P>今天很开心啊,嘻嘻</P>
    </template>
  </div>
</template>

补充二:v-slot在有插槽名字的情况下可以简写为#,在没有插槽的情况下不能这么写哈。

<!-- 这样会触发一个警告 -->
<current-user #="{ user }">
  {{ user.firstName }}
</current-user>
如果你希望使用缩写的话,你必须始终以明确插槽名取而代之:

<current-user #default="{ user }">
  {{ user.firstName }}
</current-user>

补充三:关于作用域插槽和具名插槽放一块的写法。

// 这是父子组件中引入的子组件
<div >
<p>我是父组件</p>
<children>
      // 直接在名字后面附上绑定的值就好
      <template  v-slot:fagognzi=‘content‘>
                <!-- 按钮 -->
                <div v-if="rendWage(content.item, content.index)">
                    <el-button type="danger" size="small" plain round @click="onPaysendWage(content.item)">发工资</el-button>
                </div>
            </template>

</children>

插槽的分享就到这里了,希望大家能有一些收获哈,也请大神们多多指教。

原文地址:https://www.cnblogs.com/beauty-han/p/11828911.html

时间: 2024-10-08 12:46:59

vue学习之插槽的相关文章

Vue学习笔记入门篇——组件的内容分发(slot)

本文为转载,原文:Vue学习笔记入门篇--组件的内容分发(slot) 介绍 为了让组件可以组合,我们需要一种方式来混合父组件的内容与子组件自己的模板.这个过程被称为 内容分发 (或 "transclusion" 如果你熟悉 Angular).Vue.js 实现了一个内容分发 API,使用特殊的 'slot' 元素作为原始内容的插槽. 编译作用域 在深入内容分发 API 之前,我们先明确内容在哪个作用域里编译.假定模板为: <child-component> {{ messa

Vue学习笔记进阶篇——Render函数

本文为转载,原文:Vue学习笔记进阶篇--Render函数 基础 Vue 推荐在绝大多数情况下使用 template 来创建你的 HTML.然而在一些场景中,你真的需要 JavaScript 的完全编程的能力,这就是 render 函数,它比 template 更接近编译器. <h1> <a name="hello-world" href="#hello-world"> Hello world! </a> </h1>

Vue学习笔记入门篇——组件的使用

本文为转载,原文:Vue学习笔记入门篇--组件的使用 组件定义 组件 (Component) 是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.在较高层面上,组件是自定义元素,Vue.js 的编译器为它添加特殊功能.在有些情况下,组件也可以是原生 HTML 元素的形式,以 is 特性扩展. 组件使用 注册 注册一个全局组件,你可以使用 Vue.component(tagName, options).组件在注册之后,便可以在父实例的模块中以自定义元素 的形式使用.

Vue学习笔记入门篇——组件的通讯

本文为转载,原文:Vue学习笔记入门篇--组件的通讯 组件意味着协同工作,通常父子组件会是这样的关系:组件 A 在它的模版中使用了组件 B.它们之间必然需要相互通信:父组件要给子组件传递数据,子组件需要将它内部发生的事情告知给父组件.然而,在一个良好定义的接口中尽可能将父子组件解耦是很重要的.这保证了每个组件可以在相对隔离的环境中书写和理解,也大幅提高了组件的可维护性和可重用性.在 Vue 中,父子组件的关系可以总结为 props down, events up.父组件通过 props 向下传递

Vue学习笔记目录

本文为转载,原文:Vue学习笔记目录 Vue介绍 Vue.js是当下很火的一个JavaScript MVVM库,它是以数据驱动和组件化的思想构建的.相比于Angular.js,Vue.js提供了更加简洁.更易于理解的API,使得我们能够快速地上手并使用Vue.js. 如果你之前已经习惯了用jQuery操作DOM,学习Vue.js时请先抛开手动操作DOM的思维,因为Vue.js是数据驱动的,你无需手动操作DOM.它通过一些特殊的HTML语法,将DOM和数据绑定起来.一旦你创建了绑定,DOM将和数据

vue学习笔记——简单的介绍以及安装(一)

学习编程需要的是 API+不断地练习^_^ Vue官网:https://cn.vuejs.org/ 菜鸟教程:http://www.runoob.com/vue2/vue-tutorial.html 1.简单的介绍 Vue.js(读音 /vju?/, 类似于 view) 是一套构建用户界面的渐进式框架. Vue 只关注视图层, 采用自底向上增量开发的设计. Vue 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件. Vue 学习起来非常简单,本教程基于 Vue 2.1.8 版

【Vue学习笔记1】基于Vue2.2.6版本

记录一下自己关于Vue学习的过程,便于以后归纳整理以及复习. 1.下载引用vue.js 下载: npm install vue ,然后引用. 或直接线上引用: <script src="https://unpkg.com/vue/dist/vue.js"></script> 2.基于vue2.26版本 MVVM模式,M(模型),V(视图),VM(VideoModel)

Vue学习笔记进阶篇——过渡状态

本文为转载,原文:Vue学习笔记进阶篇--过渡状态Vue 的过渡系统提供了非常多简单的方法设置进入.离开和列表的动效.那么对于数据元素本身的动效呢,比如: 数字和运算 颜色的显示 SVG 节点的位置 元素的大小和其他的属性 所有的原始数字都被事先存储起来,可以直接转换到数字.做到这一步,我们就可以结合 Vue 的响应式和组件系统,使用第三方库来实现切换元素的过渡状态. 状态动画和watcher 通过 watcher 我们能监听到任何数值属性的数值更新.可能听起来很抽象,所以让我们先来看看使用 T

Vue学习笔记进阶篇——列表过渡及其他

本文为转载,原文:Vue学习笔记进阶篇--列表过渡及其他本文将介绍Vue中的列表过渡,动态过渡, 以及可复用过渡是实现. 列表过渡 目前为止,关于过渡我们已经讲到: 单个节点 同一时间渲染多个节点中的一个 那么怎么同时渲染整个列表,比如使用 v-for ?在这种场景中,使用 <transition-group>组件.在我们深入例子之前,先了解关于这个组件的几个特点: 不同于 <transition>, 它会以一个真实元素呈现:默认为一个<span>.你也可以通过 tag