本文是早期学习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方法来实现。

代码的执行结果为:

注意:在使用v-on标签或者是其语法糖@的时候,函数的名称不支持驼峰标识命名的方式。

二、插槽(内容分发)

插槽的简单说明: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)的更多相关文章

  1. Vue.js 源码分析(十四) 基础篇 组件 自定义事件详解

    我们在开发组件时有时需要和父组件沟通,此时可以用自定义事件来实现 组件的事件分为自定义事件和原生事件,前者用于子组件给父组件发送消息的,后者用于在组件的根元素上直接监听一个原生事件,区别就是绑定原生事 ...

  2. 从0到1用react+antd+redux搭建一个开箱即用的企业级管理后台系列(基础篇)

    背景 ​ 最近因为要做一个新的管理后台项目,新公司大部分是用vue写的,技术栈这块也是想切到react上面来,所以,这次从0到1重新搭建一个react项目架子,需要考虑的东西的很多,包括目录结构.代码 ...

  3. 前端开发:css基础知识之盒模型以及浮动布局。

    前端开发:css基础知识之盒模型以及浮动布局 前言 楼主的蛮多朋友最近都在学习html5,他们都会问到同一个问题 浮动是什么东西?  为什么这个浮动没有效果?  这个问题楼主已经回答了n遍.今天则是把 ...

  4. 【Windows10 IoT开发系列】配置篇

    原文:[Windows10 IoT开发系列]配置篇 Windows10 For IoT是Windows 10家族的一个新星,其针对不同平台拥有不同的版本.而其最重要的一个版本是运行在Raspberry ...

  5. ESP8266开发之旅 基础篇① 走进ESP8266的世界

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...

  6. ESP8266开发之旅 基础篇② 如何安装ESP8266的Arduino开发环境

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...

  7. ESP8266开发之旅 基础篇③ ESP8266与Arduino的开发说明

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...

  8. ESP8266开发之旅 基础篇④ ESP8266与EEPROM

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...

  9. openlayers5-webpack 入门开发系列一初探篇(附源码下载)

    前言 openlayers5-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载 ...

  10. leaflet-webpack 入门开发系列一初探篇(附源码下载)

    前言 leaflet-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址 w ...

随机推荐

  1. DAY2--IMU测量单元&emmc内存

    打智能车比赛天天碰到imu这个东西,今天给他弄清楚去 1.IMU介绍 惯性测量单元(Inertial measurement unit,简称 IMU),是测量物体三轴姿态角及加速度的装置.一般IMU包 ...

  2. Wolfram常用计算

    1.方程与方程组 例1:求解方程 参考表达式: solve x^3 + 2x^2 - 6x + 5 = 0 real 求解所有根 例2:求解方程: 参考表达式: solve ax^2+bx+c=0 注 ...

  3. RocketMQ的Consumer是如何消费消息的

    Rocketmq提供了两种主要的消费模式:推送式消费(Push Consumer)和 拉取式消费(Pull Consumer) 一.Consumer消费消息的基本流程 1.实例化Consumer:创建 ...

  4. 基于注解创建bean对象和注入方式

    一.配置spring核心配置文件ApplicationContext.xml,添加扫描包 二.注解创建bean对象 三.注入方法

  5. 你了解 Java 的 ZGC(Z Garbage Collector)吗?

    Java 的 ZGC(Z Garbage Collector) ZGC(Z Garbage Collector) 是 Java 11 引入的一种低延迟垃圾回收器,旨在减少垃圾回收时的停顿时间,并能够在 ...

  6. 阿里云Ansible自动化运维平台部署

    以下是在阿里云平台上基于Ansible实现自动化运维的完整实践指南,整合所有核心操作流程和命令,适配指定的服务器规划: 一.环境规划 主机名 IP地址 角色 操作系统 manage01 192.168 ...

  7. 运筹学之"图解法求出最优解和最大利润"

    11.某公司利用两种原料 A.B 生产甲.乙两种产品(吨),各产品所需的原料数,原料限量及单位产品所获利润如下表.企业目标是追求利润的最大化,试写出该线性规划问题的数学模型,并用图解法求出最优解和最大 ...

  8. C#之动态语言扩展

    DLR 在.NET Framework中,DLR2位于System.Dynamic命名空间和System.Runtime.CompilerServices命名空间的几个类中. dynamic 类型 可 ...

  9. TwoSum---LeetCode进阶路①

    LeetCode敲门题: 题目: Given an array of integers, return indices of the two numbers such that they add up ...

  10. 记一次burp抓不到包的排查与处理

    ​ 一次遇到了burp上奇怪的bug.访问某个页面显示 No response received from remote server , ​ 但是使用 yakit 进行抓包之后发现网站可以正常抓包 ...