前端开发系列051-基础篇之自定义事件和插槽(Vue)
本文是早期学习Vue整理的一些阶段性总结,内容主要关于Vue框架中组件的事件传递和插槽。
一、组件通信(自定义事件)
组件间通信主要涉及到两方面的内容,即父组件(父级标签)向子组件传递数据以及子组件通过自定义事件的方式来反馈给父组件。
数据的传递我们只需要在组件中使用props属性来记录和接收需要的内容即可,这里简单通过代码示例的方式说明下自定义事件。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="../../Vue/vue.min.js"></script>
</head>
<body>
<div id="demoID">
<button-custom @countereventfunction="totalEventFunction()"></button-custom>
<button-custom @countereventfunction="totalEventFunction()"></button-custom>
<div>按钮被点击的总次数为 {{total}}</div>
</div>
<template id="button_custom">
<button @click="countereventfunction">点击了当前按钮的次数为:{{counter}}</button>
</template>
<script>
//实例化组件
Vue.component("button-custom",{
template:"#button_custom",
data:function () {
return {
counter:0
}
},
methods:{
countereventfunction:function () {
//执行标签的点击事件(先把计数器 + 1)
this.counter += 1;
//发出通知 表示counterEventFunction方法已经被点击
this.$emit("countereventfunction");
}
}
});
//创建实例化Vue对象
new Vue({
el: "#demoID",
data: {
total: 0
},
methods: {
totalEventFunction: function () {
console.log("___");
this.total += 1;
}
}
});
</script>
</body>
</html>
上面的代码中我们在组件中编写了一个按钮标签,该标签在点击的时候能够更新按钮的内容 counter计数器加1、另外我们还有一个标签用来统计页面中所有按钮被点击的次数,这就要求每次组件中标签的点击事件被触发的时候父级标签应该收到通知,我们通过this.$emit方法来实现。
代码的执行结果为:

二、插槽(内容分发)
插槽的简单说明:Vue 实现了一套内容分发的 API,这套 API 基于当前的 Web Components 规范草案,将 元素作为承载分发内容的出口。
插槽分成两种,有名称的插槽和没有名称的插槽,因此也称为具名插槽和匿名插槽。
插槽的使用切入点是什么?
我们注册好组件之后,在使用组件的时候使用的自定义标签对,在这个标签对中可以有内容。
如果在定义组件的时候,我们在组件中预留了元素,那么页面在渲染的时候会使用自定义标签中的内容来替换组件中的slot元素。
下面给出匿名插槽和具名插槽使用的代码示例:
匿名插槽示例
<div id="demoID">
<my-slot>
<p>我是插槽的内容 p标签</p>
<div>我是插槽的内容 div标签</div>
<input type="date">
</my-slot>
<hr>
<my-slot></my-slot>
</div>
<template id="my_slot">
<div>
<h1>示例代码的头部标题</h1>
<!--在组件的头部和底部中间的内容是不确定的-->
<!--这个预留一个没有名称的插槽:匿名插槽-->
<!--slot标签中可以有具体的内容,如果在使用组件的时候自定义标签中有内容,那么则替换slot中的部分-->
<slot>预留的插槽出口</slot>
<footer>示例代码的底部标签</footer>
</div>
</template>
<script>
//组件实例化
Vue.component("my-slot",{
template:"#my_slot"
})
new Vue({
el:"#demoID"
})
</script>
代码在运行的时候,组件中预留的slot标签会被自定义标签my-slot(组件)内部的标签完成替换。
具名插槽代码示例
v id="demoID">
<my-slot>
<div slot="cpu">Core i8 </div>
<div slot="memory">64GB内存条</div>
<div slot="store">我是存储相关的插槽信息1</div>
<div slot="store">我是存储相关的插槽信息2</div>
<div slot="hard-drive">1TB的固态硬盘</div>
</my-slot>
</div>
<template id="my_slot">
<div class="main">
<slot name="cpu">我是cpu插槽</slot><br>
<slot name="memory">我是memory插槽</slot><br>
<slot name="store">我是存储插槽</slot><br>
<slot name="hard-drive">我是硬盘插槽</slot><br>
</div>
</template>
<script>
//组件实例化
Vue.component("my-slot",{
template:"#my_slot"
});
//创建Vue实例对象
new Vue({
el:"#demoID"
})
</script>
代码的执行结果为:

前端开发系列051-基础篇之自定义事件和插槽(Vue)的更多相关文章
- Vue.js 源码分析(十四) 基础篇 组件 自定义事件详解
我们在开发组件时有时需要和父组件沟通,此时可以用自定义事件来实现 组件的事件分为自定义事件和原生事件,前者用于子组件给父组件发送消息的,后者用于在组件的根元素上直接监听一个原生事件,区别就是绑定原生事 ...
- 从0到1用react+antd+redux搭建一个开箱即用的企业级管理后台系列(基础篇)
背景 最近因为要做一个新的管理后台项目,新公司大部分是用vue写的,技术栈这块也是想切到react上面来,所以,这次从0到1重新搭建一个react项目架子,需要考虑的东西的很多,包括目录结构.代码 ...
- 前端开发:css基础知识之盒模型以及浮动布局。
前端开发:css基础知识之盒模型以及浮动布局 前言 楼主的蛮多朋友最近都在学习html5,他们都会问到同一个问题 浮动是什么东西? 为什么这个浮动没有效果? 这个问题楼主已经回答了n遍.今天则是把 ...
- 【Windows10 IoT开发系列】配置篇
原文:[Windows10 IoT开发系列]配置篇 Windows10 For IoT是Windows 10家族的一个新星,其针对不同平台拥有不同的版本.而其最重要的一个版本是运行在Raspberry ...
- ESP8266开发之旅 基础篇① 走进ESP8266的世界
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...
- ESP8266开发之旅 基础篇② 如何安装ESP8266的Arduino开发环境
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...
- ESP8266开发之旅 基础篇③ ESP8266与Arduino的开发说明
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...
- ESP8266开发之旅 基础篇④ ESP8266与EEPROM
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...
- openlayers5-webpack 入门开发系列一初探篇(附源码下载)
前言 openlayers5-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载 ...
- leaflet-webpack 入门开发系列一初探篇(附源码下载)
前言 leaflet-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址 w ...
随机推荐
- public boolean add(E e)的源码分析
public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess ...
- java基础之继承,抽象类
一.继承 :就是子类继承父类的非私有属性和行为 二.特点 1.子类和父类中出现了同名的成员变量时,在子类中需要访问父类中非私有成员变量时,需要使用 super 关键字 格式:super.父类成员变量名 ...
- AI提示词:通用 vscode linux c++ 项目CMakeLists和bulid模板
AI提示词 写vscode linux c++20 的CMakeLists.txt文件.build.rebuild文件 这是多项目结构,目录结构如下: projs: │ build.sh 顶层buil ...
- live555开发笔记(二):live555创建RTSP服务器源码剖析,创建rtsp服务器的基本流程总结
前言 基于Live555的流媒体服务器方案源码剖析,了解基本的代码搭建步骤. Demo 关于.h264与.265 没深入研究,但是h264的后缀名.264替换为.h264文件, ...
- HTML5和CSS3基础
HTML元素 空元素 不是所有元素都拥有开始标签.内容和结束标签.一些元素只有一个标签,通常用来在此元素所在位置插入/嵌入一些东西.这些元素被称为空元素例如:元素 `` 是用来在页面插入一张指定的图片 ...
- UnoCSS原子CSS引擎
UnoCSS是一款原子化的即时按需 CSS 引擎,其中没有核心实用程序,所有功能都是通过预设提供的.默认情况下UnoCSS应用通过预设来实现相关功能. UnoCSS中文文档: https://www. ...
- B1009 说反话
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出. 输入格式: 测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串.字符串由若干单词和若干空格组成,其中单词是由英文字母(大小 ...
- GDAL 2.X升级3.X需要注意的问题总结
1 引言 最近终于将使用的GDAL 2.X升级到成了3.X版本,总结一下遇到的各种问题. 2 详论 2.1 数据路径 GDAL 3.X以后深度依赖PROJ库,以前只是可选构建项,现在已经是必须构建项了 ...
- 小白也行的:Easy OCR做一款免费的图片转文字
\(\text{EasyOCR}\) 支持超过 \(80\) 种语言的识别,包括英语.中文(简繁).阿拉伯文.日文等,并且该库在不断更新中,未来会支持更多的语言.像市面上所有的图片识别都用的是 \(\ ...
- python爬虫学习——urllib库
#获取一个get请求 #import urllib.request # response = urllib.request.urlopen("http://www.baidu.com&quo ...