前端开发系列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 ...
随机推荐
- 使用Python和SymPy推导斯特林公式
引言 斯特林公式(Stirling's Approximation)是一种用来近似计算阶乘的数学公式.它是数学分析中非常重要的近似公式之一,尤其在概率论.统计学.物理学等领域中广泛应用.本文将使用 P ...
- Python科学计算系列1—方程和方程组
1.一元方程求解 例1:求下列一元二次方程的解 代码如下: # 定义数学符号 from sympy import symbols, solve x = symbols('x') f = x ** 2 ...
- 【记录】smartctl|Linux如何通过smartctl查看有没有坏的磁盘?以及使用时长、电源周期、故障记录等
smartctl是一个用于监测和分析硬盘健康状态的工具,可以用于检测是否存在坏的磁盘.以下是使用smartctl检查磁盘健康状态的步骤: 安装smartctl软件 在Linux系统中,smartc ...
- Springboot 的一些默认配置规则
说明 本文样例说明仅适用 maven 环境和语法,但所述内容也适用 gradle 原文地址:https://www.cnblogs.com/qnlcy/p/15905544.html 一.日志 1. ...
- 内网私仓全流程搭建记录(一)-Nexus3环境搭建
1.部署 1)在https://help.sonatype.com/repomanager3/product-information/download中下载对应环境及版本,此处要求3以上版本,本次以& ...
- Surrounded Regions——LeetCode进阶路
原题链接https://leetcode.com/problems/surrounded-regions/ 题目描述 Given a 2D board containing 'X' and 'O' ( ...
- 聊一聊 C# NativeAOT 多平台下的函数导出
一:背景 1. 讲故事 昨晚训练营里有一位朋友提到一个问题,说 C# AOT程序能否编译为一个dll,供其他语言调用,其实这个是完全没有问题的,也确实我的的文章体系中没有涉及到这块,那今天就补充完整吧 ...
- HTTP接口的中文乱码问题【python版】
一.问题:在软件接口开发过程中,request返回的信息在print的时候出现了乱码.默认编码:ISO-8859-1问题原因:可以在request语句后面插入print(result.enco ...
- HashMap的数据结构和源码分析
如果想透彻理解什么是HashMap,首先需要知道HashMap的数据结构是什么:其次需要厘清它能做什么,即它的功能:最后,还需要知道HashMap怎么实现这些功能的.下面我们针对这三个方面展开剖析. ...
- Spring注解之@Autowired:装配构造函数和属性
在User类中创建一个构造函数,传入参数student: import org.springframework.beans.factory.annotation.Autowired; import o ...