Vue自定义指令与Vue插槽学习

news2024/11/25 0:46:51

文章目录

    • 自定义指令
      • 1.指令介绍
      • 2.自定义指令
      • 3.自定义指令语法
      • 4.指令中的配置项
    • 自定义指令-指令的值
      • 1.使用效果
      • 2.语法
    • 插槽-默认插槽
      • 1.作用
      • 2.用处
      • 4.插槽的基本语法
    • 插槽-具名插槽
      • 1.作用
      • 2.具名插槽语法
      • 3.v-slot的简写
    • 插槽总结
      • 1.插槽分类
      • 2.作用
      • 3.场景
      • 4.使用步骤

自定义指令

1.指令介绍

  • 内置指令:v-html、v-if、v-bind、v-on… 这都是Vue内置的一些指令,可以直接使用
  • 自定义指令:同时Vue也支持让开发者,自己注册一些指令。这些指令被称为自定义指令

每个指令都有自己各自独立的功能

2.自定义指令

概念:自己定义的指令,可以封装一些DOM操作,扩展额外的功能

3.自定义指令语法

image.png

  • 全局注册
//在main.js中
Vue.directive('指令名', {
  "inserted" (el) {
    // 可以对 el 标签,扩展额外功能
    el.focus()
  }
})
  • 局部注册
//在Vue组件的配置项中
directives: {
  "指令名": {
    inserted () {
      // 可以对 el 标签,扩展额外功能
      el.focus()
    }
  }
}
  • 使用指令

注意:在使用指令的时候,一定要先注册再使用,否则会报错使用指令语法: v-指令名。如:
注册指令时不用v-前缀,但使用时一定要加v-前缀

4.指令中的配置项

inserted:被绑定元素插入父节点时调用的钩子函数
el:使用指令的那个DOM元素

自定义指令-指令的值

1.使用效果

实现一个 color 指令 - 传入不同的颜色, 给标签设置文字颜色

2.语法

1.在绑定指令时,可以通过“等号”的形式为指令 绑定 具体的参数值

<div v-color="color">我是内容</div>

2.通过 binding.value 可以拿到指令值,指令值修改会 触发 update 函数

示例:

<template>
  <div>
    <h1 v-color="color1">指令的值1测试</h1>
    <h1 v-color="color2">指令的值2测试</h1>
  </div>
</template>

<script>
export default {
  data () {
    return {
      color1:'red',
      color2:'blue'
    }
  },
  directives: {
    color:{
      //inserted提供的是元素被添加到页面时的逻辑
      inserted(el,binding){
        el.style.color=binding.value
      },
      //update提供的是元素被更新时的逻辑
      update(el,binding){
        el.style.color=binding.value
      }

    }
  }
}
</script>

<style>

</style>

插槽-默认插槽

1.作用

让组件内部的一些 结构 支持 **自定义,**将需要多次显示的对话框,封装成一个组件

2.用处

组件的内容部分,不写死,使用的时候可以自定义。传什么就显示什么

4.插槽的基本语法

  1. 组件内需要定制的结构部分,改用****占位,solt里可以填写默认内容(不传入内容时就显示)
  2. 使用组件时, ****标签内部, 传入结构替换slot
  3. 给插槽传入内容时,可以传入纯文本、html标签、组件

image.png

插槽-具名插槽

1.作用

一个组件内有多处结构,需要外部传入标签,进行定制多处结构

2.具名插槽语法

  • 多个slot使用name属性区分名字
  • template配合v-slot:名字来分发对应标签

3.v-slot的简写

v-slot写起来太长,vue给我们提供一个简单写法 v-slot —> #

<template>
  <div>
    <MyDialog>
      <template v-slot:head>
        <div>
          我是大标题
        </div>
      </template>
      <template v-slot:count>
        <div>
          我是内容
        </div>
      </template>
      <template v-slot:button>
        <div>
          <button>按钮</button>
        </div>
      </template>
    </MyDialog>
  </div>
</template>

<script>
import MyDialog from './components/MyDialog.vue'
export default {
  data () {
    return {

    }
  },
  components: {
    MyDialog
  }
}
</script>

<style>
body {
  background-color: #b3b3b3;
}
</style>
<template>
  <div class="dialog">
    <div class="dialog-header">
      <slot name="head"></slot>
    </div>
    <div class="dialog-content">
      <slot name="count"></slot>
    </div>
    <div class="dialog-footer" >
      <slot name="button"></slot>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {}
  },
}
</script>

<style scoped>
* {
  margin: 0;
  padding: 0;
}
.dialog {
  width: 470px;
  height: 230px;
  padding: 0 25px;
  background-color: #ffffff;
  margin: 40px auto;
  border-radius: 5px;
}
.dialog-header {
  height: 70px;
  line-height: 70px;
  font-size: 20px;
  border-bottom: 1px solid #ccc;
  position: relative;
}
.dialog-header .close {
  position: absolute;
  right: 0px;
  top: 0px;
  cursor: pointer;
}
.dialog-content {
  height: 80px;
  font-size: 18px;
  padding: 15px 0;
}
.dialog-footer {
  display: flex;
  justify-content: flex-end;
}
.dialog-footer button {
  width: 65px;
  height: 35px;
  background-color: #ffffff;
  border: 1px solid #e1e3e9;
  cursor: pointer;
  outline: none;
  margin-left: 10px;
  border-radius: 3px;
}
.dialog-footer button:last-child {
  background-color: #007acc;
  color: #fff;
}
</style>

插槽总结

1.插槽分类

  • 默认插槽
  • 具名插槽

插槽只有两种,作用域插槽不属于插槽的一种分类

2.作用

定义slot 插槽的同时, 是可以传值的。给 插槽 上可以 绑定数据,将来 使用组件时可以用

3.场景

封装表格组件

4.使用步骤

给 slot 标签, 以 添加属性的方式传值

所有添加的属性, 都会被收集到一个对象中

  1. { id: 3, msg: ‘测试文本’ }
  2. 在template中, 通过 #插槽名= "obj" 接收,默认插槽名为 default
<MyTable :list="list">
  <template #default="obj">
    <button @click="del(obj.id)">删除</button>
  </template>
</MyTable>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1941891.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WPS辟谣用户文档被用于AI训练:坚守个人信息保护底线

AITOP100平台获悉&#xff0c;7 月 21 日有网友在社交平台发文称“WPS 改版了用我们的文章喂给 AI 了”“WPS 疑似把我的审签内容喂给抖音豆包 AI”。这一消息引起了部分用户对于个人信息安全的担忧。针对这一传言&#xff0c;WPS官方客服微博于当日下午作出回应&#xff0c;明…

ARM功耗管理之功耗和安全

安全之安全(security)博客目录导读 思考&#xff1a;功耗与安全&#xff1f;超频攻击&#xff1f;欠压攻击&#xff1f;低功耗流程中的安全&#xff1f; 睡眠唤醒流程中&#xff0c;安全相关寄存器的备份恢复 举例&#xff1a;比如某DMA通道&#xff0c;芯片逻辑默认为安全通…

论文学习记录之一种具有边缘增强特点的医学图像分割网络

标题&#xff1a;一种具有边缘增强特点的医学图像分割网络 期刊&#xff1a;电子与信息学报-&#xff08;2022年5月出刊&#xff09; 摘要&#xff1a;针对传统医学图像分割网络存在边缘分割不清晰、缺失值大等问题&#xff0c;该文提出一种具有边缘增强特点的医学图像分割网…

【C语言】 利用栈完成十进制转二进制(分文件编译,堆区申请空间malloc)

利用栈先进后出的特性&#xff0c;在函数内部&#xff0c;进行除二取余的操作&#xff0c;把每次的余数存入栈内&#xff0c;最后输出刚好就是逆序输出&#xff0c;为二进制数 学习过程中&#xff0c;对存储栈进行堆区的内存申请时候&#xff0c;并不是很熟练&#xff0c;一开始…

【LaTeX Overleaf】 论文修订

对于在word中写的论文一般是使用【审阅】-【比较文档】来输出对比结果&#xff1b;对于overleaf&#xff0c;使用LaTeX排版&#xff0c;如何通过标记文字颜色来实现对比效果呢&#xff1f;&#xff1f; 1 批注功能-使用changes 宏包 在 LaTeX 中&#xff0c;changes 宏包是一个…

汽车技术智能化程度不断提升,线束可靠性如何设计?

随着汽车技术的高速发展&#xff0c;汽车自动化、智能化程度的逐步提高&#xff0c;人们对汽车的安全性、舒适性、娱乐性等要求也不断提高&#xff0c;加上汽车节能减排法规的不断严峻&#xff0c;整车电气设备不断增加&#xff0c;作为连接汽车各种电器设备“神经网络”的整车…

docker安装jenkins,并配置jdk、node和maven

拉取jenkins镜像 docker pull jenkins/jenkins:2.468-jdk21 创建一个文件夹&#xff0c;用于二次打包jenkins镜像 mkdir -p /data/jenkins cd /data/jenkins 提前准备好jdk和maven&#xff0c;并放到/data/jenkins下 由于8.x以上版本的maven只支持https协议&#xff0c;我们需…

分享一个最近在进行前后端联调时改了2天的bug...

场景再现 我们这边前端端口是8080 后端端口是8121 我们在前端里在首页面写了一个任务 当进入网页三秒后 发起一个叫getLoginUser的请求 我们的getLoginUser是调用的这里 一个异步请求 这边我们前端调用后端的接口也已经写好 我们先把后端跑起来 访问前端页面 接收到了这个…

源码搭建国内微短剧系统(APP+小程序)云存储配置流程

国内微短剧系统很多人不知道云存储和配置的操作流程&#xff0c;我整理了一份非常详细的操作文档流程&#xff0c;给大家介绍短剧系统云存储配置的详细操作流程。顺便推荐一下国内微短剧系统。 推荐下他们的开源地址&#xff1a;https://gitee.com/nymaite_com_2878868888/tjg…

arthas在idea和docker中的应用

基于IDEA工具使用 1&#xff0c;安装arthas插件 安装之后重启&#xff0c;然后再代码区域右键如果可以看到如下菜单选项&#xff0c;则说明安装成功 2&#xff0c;pom文件中配置arthas相关jar包 <!-- https://mvnrepository.com/artifact/com.taobao.arthas/arthas-pack…

JS 鼠标拖动实现移动滚动条的滚动效果

效果 现在很多场景都以移动端为基本开发&#xff0c;比如说需要隐藏滚动条&#xff0c;在pc上实现鼠标拖动和手机触摸拖动差不多的效果。 实现 以mdn的overflow属性中范例为基础&#xff0c;内容溢出时候可使用overflow: auto;和overflow: scroll;实现滚动效果。 要实现鼠标…

【Day1415】Bean管理、SpringBoot 原理、总结、Maven 高级

0 SpringBoot 配置优先级 从上到下 虽然 springboot 支持多种格式配置文件&#xff0c;但是在项目开发时&#xff0c;推荐统一使用一种格式的配置 &#xff08;yml是主流&#xff09; 1 Bean管理 1.1 从 IOC 容器中获取 Bean 1.2 Bean 作品域 可以通过注解 Scope("proto…

LeetCode 415.字符串相加 C++写法

LeetCode 415.字符串相加 C写法 思路&#x1f914;&#xff1a; 首先不能用stoi和tostring来做&#xff0c;如果给一个很大的数那一定存不下。我们可以从后往前一位一位的取&#xff0c;创建一个变量存储进位用于计算下一位数&#xff0c;之后取模得到当前数字&#xff0c;每一…

Redis+Lua脚本+AOP+反射+自定义注解,打造我司内部基础架构限流组件

定义注解 Retention(RetentionPolicy.RUNTIME) Target({ElementType.METHOD}) Documented public interface RedisLimitAnnotation {/*** 资源的key,唯一* 作用&#xff1a;不同的接口&#xff0c;不同的流量控制*/String key() default "";/*** 最多的访问限制次数…

netty使用redis发布订阅实现消息推送

netty使用redis发布订阅实现消息推送 场景 项目中需要给用户推送消息: 接口 RestController public class PushApi {Autowiredprivate PushService pushService;/*** 消息推送* param query* return*/PostMapping("/push/message")public String push(RequestBody…

华为Ascend C算子开发(中级)考试

华为Ascend C算子开发&#xff08;中级&#xff09;考试题 提示&#xff1a;这个是河北廊坊Ascend C算子开发考试题和答案&#xff0c;仅供参考&#xff0c;因为不确定其他城市的考试题是否也是一样 文章目录 华为Ascend C算子开发&#xff08;中级&#xff09;考试题一、op_ho…

音视频入门基础:H.264专题(16)——FFmpeg源码中,判断某文件是否为H.264裸流文件的实现

一、引言 通过FFmpeg命令可以判断出某个文件是否为AnnexB格式的H.264裸流&#xff1a; 所以FFmpeg是怎样判断出某个文件是否为AnnexB格式的H.264裸流呢&#xff1f;它内部其实是通过h264_probe函数来判断的。从文章《FFmpeg源码&#xff1a;av_probe_input_format3函数分析》中…

VSCode STM32嵌入式开发插件记录

要卸载之前搭建的VSCode嵌入式开发环境了&#xff0c;记录一下用的插件。 1.Cortex-Debug https://github.com/Marus/cortex-debug 2.Embedded IDE https://github.com/github0null/eide 3.Keil uVision Assistant https://github.com/jacksonjim/keil-assistant/ 4.RTO…

python-爬虫实例(4):获取b站的章若楠的视频

目录 前言 道路千万条&#xff0c;安全第一条 爬虫不谨慎&#xff0c;亲人两行泪 获取b站的章若楠的视频 一、话不多说&#xff0c;先上代码 二、爬虫四步走 1.UA伪装 2.获取url 3.发送请求 4.获取响应数据进行解析并保存 总结 前言 道路千万条&#xff0c;安全第一条 爬…

剧本杀小程序搭建,互联网下的游戏新体验,实现新增收!

近几年&#xff0c;桌游备受大众青睐&#xff0c;剧本杀行业更是瞬间曝火&#xff01;拥有强大社交体验与沉浸式游戏体验的剧本杀成为了众多年轻人的新宠&#xff0c;无论是外出游玩还是好友聚会&#xff0c;剧本杀游戏都成为了首选方式。 随着互联网的发展&#xff0c;线上小…