【Vue】2-14、插槽 自定义指令

一、插槽

插槽(Slot)是 vue 为组件的封装者提供的能力。允许封装者在封装组件时,把不确定的,希望由用户指定的部分定义为插槽。  

<template><div class="app-container"><h1>App 根组件</h1><hr /><div class="box"><!-- 渲染 Left 组件和 Right 组件 --><Left><!-- 默认情况下,在使用组件的时候提供的内容都会被填充到名称为 default 的插槽当中v-slot 指令只能用于 template 组件中--><!--  <template v-slot:default> --><template #default><p>这是在 Left 组件中声明的 p 标签</p></template></Left></div></div>
</template><script>
import Left from "@/components/Left.vue";export default {components: {Left,},
};
</script><style lang="less">.app-container {padding: 1px 20px 20px;background-color: #efefef;}.box {display: flex;}
</style>

<template><div class="left-container"><h3>Left 组件</h3><hr /><!-- 声明插槽区域 --><!-- Vue 官方规定每个插槽都要有一个 name 名称,若省略了 name 属性,则有一个默认 name 名称:default --><slot><!-- 若用户没有在使用 Left 组件时指定插槽中的内容,即默认展示 slot 标签中的内容:官方称为 “后备内容” -->这是 deault 插槽中默认的内容</slot></div>
</template><script>
export default {};
</script><style lang="less">.left-container {padding: 0 20px 20px;background-color: orange;min-height: 250px;flex: 1;}
</style>

二、具名插槽 

带有 name 名称的 slot 插槽就是具名插槽  

<template><div class="aricle-container"><!-- 文字的标题 --><div class="header-box"><slot name="title"></slot></div><!-- 文字的内容 --><div class="content-box"><slot name="content"></slot></div><!-- 文字的作者 --><div class="footer-box"><slot name="author"></slot></div></div>
</template><script>
export default {name: "Article",data() {return {};},
};
</script><style lang="less" scoped>
.aricle-container {> div {min-height: 150px;}.header-box {background-color: pink;}.content-box {background-color: lightskyblue;}.footer-box {background-color: lightgreen;}
}
</style>
<template><div class="app-container"><h1>App 根组件</h1><Article><template #title><h3>一首诗</h3></template><template #content><div><p>锄禾日当午,汗滴禾下土</p><p>锄禾日当午,汗滴禾下土</p><p>锄禾日当午,汗滴禾下土</p><p>锄禾日当午,汗滴禾下土</p></div></template><template #author><p>佚名</p></template></Article><hr /><div class="box"><!-- 渲染 Left 组件和 Right 组件 --><Left style="display: none"><!-- 默认情况下,在使用组件的时候提供的内容都会被填充到名称为 default 的插槽当中v-slot 指令只能用于 template 组件中--><!--  <template v-slot:default> --><template #default><p>这是在 Left 组件中声明的 p 标签</p></template></Left></div></div>
</template><script>
import Left from "@/components/Left.vue";
import Article from "@/components/Article.vue";export default {components: {Left,Article,},
};
</script><style lang="less">
.app-container {padding: 1px 20px 20px;background-color: #efefef;
}
.box {display: flex;
}
</style>

作用域插槽:  

<!-- 在封装组件时,为预留的 slot 提供属性对应的值,这种做法叫做:作用域插槽 -->
<div class="content-box"><slot name="content" msg="hello vue"></slot>
</div>
<template #content="obj"><div><p>锄禾日当午,汗滴禾下土</p><p>锄禾日当午,汗滴禾下土</p><p>锄禾日当午,汗滴禾下土</p><p>锄禾日当午,汗滴禾下土</p><p>{{ obj }}</p></div>
</template>

三、自定义指令 

1、私有自定义指令

在每个 vue 组件中,可以在 directives 节点下声明私有自定义指令

directives:{color:{// 为绑定到的 HTML 元素设置红色的文字bind(el){// 形参中的 el 是绑定了此指令的、原生的 DOM 对象el.style.color = 'pink'}}
}

注意:

当指令第一次绑定到元素时调用 bind 函数,当 DOM 更新时 bind 函数不会触发。

update 函数会在每次 DOM 更新时被调用

directives: {color: {// 为绑定到的 HTML 元素设置红色的文字bind(el, binding) {// 形参中的 el 是绑定了此指令的、原生的 DOM 对象el.style.color = binding.value;},update(el, binding) {el.style.color = binding.value;},},},

若 bind 和 update 函数中的逻辑完全相同,则对象格式的自定义指令可以简写成函数格式:  

color(el, binding) {el.style.color = binding.value;
},

2、全局自定义指令

全局共享的自定义指令需要通过 Vue.directive() 进行声明

// 参数一:字符串,表示全局自定义指令的名字
// 参数二:对象,用来接收指令的参数值
Vue.directive('color',function(el,binfing){el.style.color = binding.value
})

一  叶  知  秋,奥  妙  玄  心

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

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

相关文章

【Mysql】数据库架构学习合集

目录 1. Mysql整体架构1-1. 连接层1-2. 服务层1-3. 存储引擎层1-4. 文件系统层 2. 一条sql语句的执行过程2-1. 数据库连接池的作用2-2. 查询sql的执行过程2-1. 写sql的执行过程 1. Mysql整体架构 客户端&#xff1a; 由各种语言编写的程序&#xff0c;负责与Mysql服务端进行网…

go数据操作-elasticsearch

go-elasticsearch是Elasticsearch 官方提供的 Go 客户端。每个 Elasticsearch 版本会有一个对应的 go-elasticsearch 版本。 1.安装依赖 执行以下命令安装v8版本的 go 客户端。 go get github.com/elastic/go-elasticsearch/v8latest导入依赖。 import "github.com/el…

vue学习——elementPlus安装及国际化

引入完整的elementPlus 安装 pnpm i element-plus引入 // main.ts import { createApp } from vue import ElementPlus from element-plus import element-plus/dist/index.css import App from ./App.vueconst app createApp(App)app.use(ElementPlus) app.mount(#app)图标…

JAVA斗地主逻辑-控制台版

未排序版&#xff1a; 准备牌->洗牌 -> 发牌 -> 看牌: App程序入口&#xff1a; package doudihzu01;public class App {public static void main(String[] args) {/*作为斗地主程序入口这里不写代码逻辑*///无参创建对象&#xff0c;作为程序启动new PokerGame();…

大力说视频号第二课:视频号如何挂链接带货

最近&#xff0c;随着视频号带货的风潮&#xff0c;不少小伙伴已经成功跟上潮流&#xff0c;在这个平台上轻松赚取收入。 然而&#xff0c;仍有不少小伙伴对于如何在视频号中挂链接带货感到有些困惑。 目前&#xff0c;视频号的主流带货方式主要分为三种&#xff1a; 01 挂“…

(每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第9章 项目范围管理(四)

博主2023年11月通过了信息系统项目管理的考试&#xff0c;考试过程中发现考试的内容全部是教材中的内容&#xff0c;非常符合我学习的思路&#xff0c;因此博主想通过该平台把自己学习过程中的经验和教材博主认为重要的知识点分享给大家&#xff0c;希望更多的人能够通过考试&a…

回归预测 | Matlab实现CPO-LSTM【24年新算法】冠豪猪优化长短期记忆神经网络多变量回归预测

回归预测 | Matlab实现CPO-LSTM【24年新算法】冠豪猪优化长短期记忆神经网络多变量回归预测 目录 回归预测 | Matlab实现CPO-LSTM【24年新算法】冠豪猪优化长短期记忆神经网络多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现CPO-LSTM【24年新算…

QT 范例阅读: undoframework

一、功能 通过给 QGraphicsScene 添加、删除、移动 QGraphicsPolygonItem 来演示 撤销重做功能 标签 undo framework example 二、核心代码&#xff0c;以添加图例为例 MainWindow.cpp 的核心代码 //1 创建堆栈 undoStack new QUndoStack(this); //2 以列表的形式显…

LeetCode第783题 - 二叉搜索树节点最小距离

题目 解答 方案一 class Solution {private List<Integer> values new ArrayList<>();public void inorder(TreeNode node) {if (node null) {return;}inorder(node.left);values.add(node.val);inorder(node.right);}public int minDiffInBST(TreeNode root)…

AI 代码生成

1 csdnC知道 https://so.csdn.net/chat?from_spm1008.2611.3001.9686 2 百度搜索AI伙伴 https://chat.baidu.com/ 3 阿里通义千问 https://tongyi.aliyun.com/qianwen/?spm5176.28326591.0.0.2a8a6ee1TUqfmH //还有的小伙伴们留言,我来整理 //感谢大家的点赞&#xff0c;…

工业自动化中与多台PLC通讯的基本指南

与多台PLC进行通讯是工业自动化中常见的需求。通常&#xff0c;一台THM&#xff08;通常是触摸屏或人机界面&#xff09;会与多台PLC进行通讯&#xff0c;以实现数据交互和控制功能。以下是一个基本的步骤指南&#xff0c;用于实现1台THM与多台PLC的通讯&#xff1a; 确定通讯…

在本机搭建私有NuGet服务器

写在前面 有时我们不想对外公开源码&#xff0c;同时又想在VisualStudio中通过Nuget包管理器来统一管理这些内部动态库&#xff0c;这时就可以在本地搭建一个NuGet服务器。 操作步骤 1.下载BaGet 这是一个轻量级的NuGet服务器 2.部署BaGet 将下载好的release版本BaGet解…

docker搭建nginx的RTMP服务器的步骤

使用Docker 另一个选项是使用Docker容器运行Nginx和RTMP模块。Docker Hub上有一些预构建的镜像&#xff0c;这些镜像已经集成了Nginx和RTMP模块&#xff0c;可以直接使用&#xff0c;无需手动编译。 例如&#xff0c;使用一个预构建的Nginx-RTMP Docker镜像&#xff1a; doc…

docker- php7.4

安装 gd拓展 anzhuanga在Dockerfile里面安装php7.4的GD库 - 知乎 apt update apt install -y libwebp-dev libjpeg-dev libpng-dev libfreetype6-devdocker-php-source extractdocker-php-ext-configure gd \ --with-jpeg/usr/include \ --with-freetype/usr/include/docker-…

Java Path详解

Java Path详解 大家好&#xff0c;我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;我们将深入探讨Java中的Path&#xff0c;解析它的功能、用法以及在文件处理中的应用…

Linux系统管理和Shell脚本笔试题

1、写一个sed命令&#xff0c;修改/tmp/input.txt文件的内容&#xff0c;要求&#xff1a;(1) 删除所有空行&#xff1b;(2) 在非空行前面加一个"AAA"&#xff0c;在行尾加一个"BBB"&#xff0c;即将内容为11111的一行改为&#xff1a;AAA11111BBB #写入内…

Android 中的卡顿优化

常见的手机卡顿现象&#xff1a; 视频加载慢&#xff1b;画面卡顿、卡死、黑屏&#xff1b;声音卡顿、音画不同步&#xff1b;动画帧卡顿&#xff0c;交互响应慢&#xff1b;滑动不跟手&#xff1b;列表自动更、滚动不流畅&#xff1b;网络响应慢、数据和画面展示慢&#xff1…

【机器学习 深度学习】卷积神经网络简述

&#x1f680;个人主页&#xff1a;为梦而生~ 关注我一起学习吧&#xff01; &#x1f4a1;专栏&#xff1a;机器学习 欢迎订阅&#xff01;相对完整的机器学习基础教学&#xff01; ⭐特别提醒&#xff1a;针对机器学习&#xff0c;特别开始专栏&#xff1a;机器学习python实战…

算法:箱子之形摆放

一、算法描述及解析 要求将一批箱子按从上到下以‘之’字形的顺序摆放在宽度为 n 的空地上&#xff0c;输出箱子的摆放位置&#xff0c; 例如&#xff1a;箱子ABCDEFG&#xff0c;空地宽为3。 如输入&#xff1a; ABCDEFG 3 输出&#xff1a; AFG BE CD 注&#xff1a;最后一行…

uni-app 经验分享,从入门到离职(三)——关于 uni-app 生命周期快速了解上手

文章目录 &#x1f4cb;前言⏬关于专栏 &#x1f3af;什么是生命周期&#x1f9e9;应用生命周期&#x1f4cc; 关于 App.vue/App.uvue &#x1f9e9;页面生命周期&#x1f4cc;关于 onShow 与 onLoad 的区别 &#x1f4dd;最后 &#x1f4cb;前言 这篇文章是本专栏 uni-app 基…