首页 > 其他分享 >vue插槽

vue插槽

时间:2023-04-17 17:57:09浏览次数:32  
标签:slot vue 插槽 slotProps header 组件

我们经常会有封装组件的需求, 组件需要的往往不只有数据, 有时候我们要给一个模块做内容方面的可自定义, 比如我封装了一个黑板, 但是我有时希望上面是字, 又有时希望上面是图画, 这就要用到插槽了

一. 插槽的基本用法

子组件

<template>
  <el-row>
    <slot></slot>
  </el-row>
</template>

父组件

<template>
  <div>
    <!-- 只需要在子组件中写下<slot>标签 就可以在父组件中直接写入想要给子组件slot标签中写入的内容了 -->
    <slot-view>简单插槽内容</slot-view>
  </div>
</template>

缺点是如果子组件中有多个slot插槽标签  父组件写入的值在子组件的插槽中都会展示(此时页面中就会显示两行 ‘简单插槽内容’ 文字)

<template>
  <el-row>
    <slot></slot>
    <slot></slot>
  </el-row>
</template>

 二. 具名插槽

子组件

<template>
  <el-row>
    <slot name="header"></slot>
    <slot name="bottom"></slot>
  </el-row>
</template>

父组件

<template>
  <div>
    <!-- 顾名思义 具名插槽就是给子组件slot插槽加上一个自己的名字  在父组件中通过tamplate包裹 用v-slot或者简写的#来规定给定哪个插槽中填入数据 -->
    <!-- 这样我们一个项目只需要一个公共插槽组件 通过name来规定在哪个模块使用哪个插槽 -->
    <slot-view>
      <template v-slot:header>
        <div>我是header</div>
      </template>
      <template #bottom>
        <div>我是bottom</div>
      </template>
    </slot-view>
  </div>
</template>

三. 动态插槽

<template>
  <div>
    <!-- 动态插槽就是我们在定义要渲染的子组件插槽内容是可以通过动态的命名方式来决定需要渲染哪个插槽的内容 -->
    <slot-view>
      <template #[header]>
        <div>我是header</div>
      </template>
    </slot-view>
  </div>
</template>
const header = ref("header");

四. 作用于插槽

插槽的内容无法访问到子组件的状态,所以父组件如果要获取插槽子组件中的状态  可以通过让子组件通过props往外抛出  父组件通过v-slot="slotProps"来接收

子组件

<template>
  <el-row>
    <slot :text="greetingMessage" :count="1"></slot>
  </el-row>
</template>
<script setup lang="ts">
import { ref } from "vue";
const greetingMessage = ref("王晶测试");
</script>

父组件

<template>
  <div>
    <slot-view v-slot="slotProps">
      <div>{{ slotProps.text }} {{ slotProps.count }}</div>
    </slot-view>
  </div>
</template>

 

标签:slot,vue,插槽,slotProps,header,组件
From: https://www.cnblogs.com/wjsy/p/17326209.html

相关文章

  • 使用vue-cli创建第一个vue项目
    命令提示符切换至需要创建项目的目录:直接在路径输入cmd在按键盘的enter键打开的终端就直接切换到该目录下(1)输入以下命令:vuecreate项目名称(2)我这里选手动选择,键盘上下按钮,选完后按enter键(3)我这里选Babel和CSS,键盘上下按钮,选中或取消选中按空格,选完后按enter键(4)我这里选......
  • vue登录路由权限管理
    前言在开发Web应用程序时,常常需要进行登录验证和权限管理。Vue是一款流行的JavaScript框架,提供了一套灵活的路由管理工具,可以方便地实现登录路由权限管理。本篇博客将介绍如何使用Vue来实现这些功能。登录验证首先,我们需要在Vue应用程序中对用户进行登录验证。在Vue中,我们可以通......
  • vscode调试 vue
    1.配置vue.config.js加上devtool:'source-map'//开发环境可以加,生产环境,别人可以看到源代码,不完全不要加 2.添加launch.jsonvscode打开调试窗口,在下图箭头指向的位置点击打开配置文件launch.json:   3.配置远程调试1)浏览器快捷方式设置浏览器桌面快捷方式......
  • vue全家桶进阶之路32:Vue3 WatchEffect和watch 监听
    在Vue3中,watchEffect是一个用于监听响应式数据变化的API。它可以在函数内部自动跟踪数据的依赖,并在依赖变化时重新运行函数。watchEffect 的作用以及各个参数的功能讲解:watchEffect(effect:(onInvalidate:InvalidateCbRegistrator)=>void|(()=>void)|Promise<vo......
  • vuex的使用
    目录简介vuex的环境调用逻辑定义vuex中的内容简介官网:https://vuex.vuejs.org/zh/在Vue中实现集中式状态(数据)管理的一个Vue插件,对vue应用中多个组件的共享状态进行集中式的管理(读/写),也是一种组件间通信的方式,且适用于任意组件间通信。Vuex是一个专为Vue.js应用程序开发......
  • Vue - watcher原理
    原理Watcher原理是先把自己设置到全局唯一指定的位置(window.target),然后读取数据。因为读取了数据,所以会触发这个数据的getter。然后在getter中就会从全局唯一的那个位置读取真正读取数据的watcher,并把这个watcher收集到Dep中去。通过这样的方式,watcher可以主动去订阅任意一个数......
  • leaflet.openPopup() 方法传入参数是个模板字符串,如何将其改为使用vue的模板实现,可以
    注:这个问题是我使用cursor得到的回答。问:leaflet.openPopup()方法传入参数是个模板字符串,如何将其改为使用vue的模板实现,可以支持数据双向绑定为了将 this.map.openPopup() 方法中的字符串模板替换为支持双向数据绑定的 Vue 模板,您可以使用 Vue.extend() 方法创建一个新......
  • vue项目中发布新版本线上自动清缓存
    背景最近项目更新频繁,每次一更新客户都说还跟之前的一样。一查原因是因为客户没有清空浏览器的缓存。所以为了方便客户看到最新版本,开始调研再发布新版本后自动清理缓存。方案每次打包后的js和css都加上hash值后缀。当文件发生改变时,hash值也改变。这样就不会走缓存举个例子vue.con......
  • vue-router
    ###################npminstallvue-router                                  <router-linkto="/user"tag="button"active-class="active"exact>GotoUserPage</router-link>这个例子中,当用户点击按钮时,会跳转到/user路由,并且按钮会添......
  • vue之插槽
    #######################                    #########################......