Vue中的slot标签

摘要:
vue组件中有三个API:props、events和slots。前两个是参数传递和触发事件。插槽实现内容分发。它相当于AngularJS中的传输,即时隙。插槽的主要功能是组合组件并扩展它们。此时,您需要使用slot<slot>标签也可以承载内容。当没有插入内容时,将显示插槽标记中的内容。vue2.5.0+插槽范围不再局限于元素,而是可以用于插槽中的任何元素或组件——通过“slotProps”自定义每个待办事项。

   vue组件中的API有三个,分别是props,events与slot。前两个分别为传参和触发事件,slot实现的是内容分发。最近使用elementUI中的组合搜索框或者添加其他自定义内容时会用到此属性。它相当于AngularJS中的transclusion,意为插槽。

  vue中的组件,可谓是相当重要的内容。slot的主要作用就是组件的组合,用来扩展组件。简单来说:

<bigbig>
 <smallsmall></smallsmall>
</bigbig>

  这样将两个自定义的组件组合起来,父组件<bigbig>也许会有自己的模板,这样<smallsmall>在里面就很尴尬,它需要一个明确的定义如何显示。此时便需要使用slot。

1.单个slot

它的含义指的就是组件模板中包含一个slot。就上个例子来说,如果<bigbig>不包含<slot>,那么<bigbig>自己本身模板中的内容将会被抛弃,只显示<smallsmall>。如果包含slot,那么<smallsmall>将会插入<slot>的内容中并且替换掉它。<slot>标签中也可以携带内容,当没有内容插入时,将显示slot标签中的内容。举个例子:

假定组件<bigbig>有如下模板:

<div>
<p>我是组件里自带的段落~</p>
<slot>如果没有需要插入的内容,就显示我啦~</slot>
</div>

现在我们要渲染以下代码:

<bigbig>
  <p>我是需要渲染的内容~</p>
</bigbig>

将显示什么结果呢?答案是先显示“我是组件里自带的段落~”再显示“我是需要渲染的内容~”。因为我们已经将其插入slot中了,并替换掉了slot中的内容。如果我们没有需要插入的内容,则会显示slot原本中的内容“如果没有需要插入的内容,就显示我啦~”

2.具名slot

它的含义简单来说就是带有名字的slot。当插槽不止一个时,为了区分他们,则需要带上名字,用法和单个slot本质上是一样的。

假定组件<bigbig>有如下模板:

<div>
<slot name=‘one’></slot>
<slot></slot>
<slot name=‘two’></slot>
</div>

接下来渲染:

<bigbig>
  <p slot='one'>111</p>
  <p slot='two'>222</p>
  <p>code</p>
</bigbig>

渲染结果为:111 code 222 。对应名称插入到对应的插槽。

3.作用域插槽

作用域插槽本质上是可以传递数据的插槽,类似于函数的传参。原来父组件可以通过绑定数据传递给子组件。作用域插槽就可以通过子组件绑定数据传递给父组件。在vue 2.5.0+ slot-scope不再限制在<template>元素上使用,而可以用在插槽内的任何元素或组件上。以下示例代码为转载:

<ul>
  <li
    v-for="todo in todos"
    v-bind:key="todo.id"
  >
    <!-- 我们为每个 todo 准备了一个插槽,-->
    <!-- 将 `todo` 对象作为一个插槽的 prop 传入。-->
    <slot v-bind:todo="todo">
      <!-- 回退的内容 -->
      {{ todo.text }}
    </slot>
  </li>
</ul>
<todo-list v-bind:todos="todos">
  <!-- 将 `slotProps` 定义为插槽作用域的名字 -->
  <template slot-scope="slotProps">
    <!-- 为待办项自定义一个模板,-->
    <!-- 通过 `slotProps` 定制每个待办项。-->
    <span v-if="slotProps.todo.isComplete"></span>
    {{ slotProps.todo.text }}
  </template>
</todo-list>

免责声明:文章转载自《Vue中的slot标签》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇IOS学习1——IOS应用程序的生命周期及基本架构Jmeter+ant+Jenkins实现接口自动化平台及报告发送下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

vue爬坑之路--------this$refs[formName]validate

vue element-ui使用自定义正则表达式: let validatePass = (rule, value, callback) => { let regExp = /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$/ if (value === '') { call...

Vue全家桶

一、简介 武林至尊,宝刀React,号令天下,莫敢不从,Vue不出,谁与争锋本文介绍Vue全家桶:Vue+Vue-router+Vuex+axios。 二、Vue Vue 是一套用于构建用户界面的渐进式框架,和React,都自称自己只关注视图层 1.引入Vue 开发环境: <script src="https://cdn.jsdelivr.net/n...

在vscode中的vue单文件组件的代码提示以及自动符合Eslint规范

一、安装相关插件 更新于2020年4月19日18:07:34 一共要安装四个插件:分别是ESLint、Vetur、VueHelper、Prettier - Code formatter VueHelper是代码自动提示的插件,我觉得用这个还是比较舒服的。 二、在settings中添加这三个插件的相关配置 插一嘴:记得写注释,不然你后期想改的时候再看脑瓜子...

实用的vue插件大汇总

Vue是一个构建数据驱动的 web 界面的渐进式框架。Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件特别整理了常用的vue插件,来了个大汇总,方便查找使用,便于工作和学习。很全的vue插件汇总,赶紧收藏下吧!github上的vue汇总https://github.com/vuejs/awesome-vue#qr-code一...

在浏览器上开发GO和Vue!(基于code-server)

在浏览器上开发GO和Vue!(基于code-server) 曾几何时,开发者们都被安装编程环境苦恼,尽管现在很多语言的开发环境已经不难装了,但是如果我们能有一个运行在云端的编译器,那么我们就可以随时随地通过浏览器编写、编译我们的代码啦!! 先看我们最终效果: 完美运行Go程序!下面开始整个环境搭建。 打包好的镜像 配置完成的Go+Vue的编译+Debug...

React 还是 Vue: 你应该选择哪一个Web前端框架?

2016年,React在Web端和移动端都实现了迅速的成长,稳稳地领先于其主要竞争对手Augular,巩固了其作为前端框架之王的地位。 但是Vue在这一年里的表现也可谓同样的耀眼。Vue.js 2.0 的发布在整个JavaScript社区都引起了巨大反响,这一点仅从它在Github中涨了25,000颗star,就足以得到证明。 不得不说React和Vue...