Vue学习计划-Vue2--VueCLi(四)组件传值和自定义事件

1. 组件传值

  1. 组件化编码流程:
    1. 拆分静态组件:组件要按照功能点拆分,命名不要与html元素冲突
    2. 实现动态组件:考虑好数据的存放位置,数据是一个组件在用,还是一些组件在用:
      1. 一个组件在用,放在组件自身即可
      2. 一些组件在用,放在他们共同的父组件上(状态提示)
    3. 实现交互:从绑定事件开始
  2. props适用于:
    1. 父组件 ===> 子组件 通信
    2. 子组件 ===> 父组件 通信(要求父先给子一个事件)
    3. 组件接收形式
    1. props: ['xxx']2.  props:{xxx:{type: String,required: true // 必传},xxx:{type: Number, // 类型default: 20 // 默认值...自定义校验等等}}3. props:{xxx: Number, // 设置类型xxx:{type: Number, // 类型default: 20 // 默认值...自定义校验等等}}    
  1. props接收的值不可以修改

示例: 我们只需要四个组件,父组件APP.vue,子组件SelectInput.vueSelectList .vueSelectMulDel.vue,需求:子组件操作数据改变父组件内的列表数据,实现增删
1. 文件目录:components文件夹内创建子组件文件
在这里插入图片描述
2. 在父组件APP.vue中:引入3个子组件

因为所有的子组件共同需要用到列表的数据,所以数据写在父组件内
因为操作的数据在父组件内部。所以和操作方法都写在父组件内

<template><div><SelectInput :addDataList="addDataList"></SelectInput><SelectList :daList="dataList" :delDataList="delDataList"/><SelectMulDel :mulDelDataList="mulDelDataList"></SelectMulDel></div>
</template>
<script>
import SelectList from './components/SelectList.vue'
import SelectInput from './components/SelectInput.vue'
import SelectMulDel from './components/SelectMulDel.vue'
export default {name: 'App',components:{SelectList,SelectInput,SelectMulDel},data(){return {// 数据创建在父组件内dataList:[{ name: '小红', checked: false},{ name: '小绿', checked: false},]}},methods:{// 添加数据addDataList(val){this.dataList.push(val)},// 删除数据delDataList(index){this.dataList.splice(index, 1)  },// 批量删除mulDelDataList(){console.log(this.dataList);this.dataList = this.dataList.filter(item=> !item.checked)}}
}
</script>
  1. 子组件SelectInput.vue中:

编写添加数据和添加按钮功能
通过props传入的添加方法实现添加功能

<template><div class="container"><input type="text" v-model="value"><button @click="add">添加</button></div>
</template>
<script>
export default{props:['addDataList'],data(){return {value: '小美丽'}},methods:{add(){console.log(this.value);this.addDataList({ name: this.value, checked: false })}}
}
</script>
  1. 子组件SelectList.vue中:

展示列表数据和行内删除
通过props传入的删除方法实现行内删除功能

<template><div class="container"><ul><!-- 批量删除, key为唯一值, 假设name不可以重复 --><li v-for="(item, index) in daList" :key="item.name"><!-- v-model双向绑定,直接改变值,就相当于改变props传入的值,引起错误 --><!-- <input type="checkbox" v-model="item.checked" @change="item.checked = !item.checked"> --><input type="checkbox" :value="item.checked" @change="item.checked = !item.checked">{{ item.name }}<button @click="del(index)">删除</button></li></ul></div>
</template><script>
export default{props:['daList', 'delDataList'],methods:{del(index){// props 传入的值不允许改变//   this.daList.splice(index, 1) this.delDataList(index, 1)  }}
}
</script>
<style scoped>
.container{background-color: antiquewhite;
}
ul{list-style: none;
}
</style>
  1. 子组件SelectMulDel.vue中:

展示列表数据的选择行为
通过props传入的批量删除方法实现批量删除功能

<template><div><button @click="mulDelete">批量删除</button></div>
</template>
<script>
export default{props:['mulDelDataList'],methods:{mulDelete(){this.mulDelDataList()},}
}
</script>
  1. 展示效果:点击功能ok
    在这里插入图片描述

2. 组件的自定义事件

  1. 一种组件间通信的方式,适用于:子组件=>父组件
  2. 使用场景:A是父组件,B是子组件,B想传给A,那么就要在A中给B绑定自定义事件(事件的回调在A中
  3. 绑定自定义事件:
    1. 第一种方式:在父组件中:<Demo @my-event="test"></Demo>
    2. 第二种方式:在父组件中:
    <Demo ref="demo"></Demo>
    ....
    mounted(){this.$refs.xxx.$on('my-event', this.test)
    }
    
    1. 若想让自定义事件只能触发一次,可以使用once修饰符,或$once方法
  4. 触发自定义事件:this.$emit('my-event', 数据)
  5. 解绑自定义事件:this.$off('my-event')
  6. 组件上也可以绑定原生DOM事件,需要使用native修饰符

示例:上述的props案例是父组件将数据和操作方法统一已props形式传入子组件,子组件还需接收才可使用,现在我们将自定义事件编写,在此已SelectInput.vue为例

  • 第一种:自定义事件@方式
  1. App.vue内修改为:@addDataList 接收子组件传过来的自定义事件
	<SelectInput @addDataList="addDataList"></SelectInput>
  1. 子组件内SelectInput.vue修改为:
<template><div class="container"><input type="text" v-model="value" /><button @click="add">添加</button></div>
</template><script>
export default {data() {return {value: "小美丽",};},methods: {add() {this.$emit("addDataList", { name: this.value, checked: false });// 可emit提交多个自定义事件},},
};
</script>
  • 第二种:自定义事件ref方式
  1. App.vue内修改为:
  1. SelectInput 标签上添加ref属性,
  2. 生命周期mounted中,通过$on绑定事件
  3. 生命周期beforeDestroy中,通过$off移除自定义事件
<SelectInput ref="MyInput"></SelectInput>
...
mounted() {this.$refs.MyInput.$on("addDataList", this.addDataList);},beforeDestroy() {this.$refs.MyInput.$off("addListInput");// this.$refs.MyInput.$off(); // 可以不传参数,移除所有自定义事件},
  1. 子组件内SelectInput.vue修改和@一样

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

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

相关文章

蓝桥杯专题-真题版含答案-【排序法 - 改良的选择排序】【插补搜寻法】【稀疏矩阵】【欧拉与鸡蛋】

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分…

PMP项目管理 - 质量管理

系列文章目录 现在的一切都是为将来的梦想编织翅膀&#xff0c;让梦想在现实中展翅高飞。 Now everything is for the future of dream weaving wings, let the dream fly in reality. PMP项目管理 - 质量管理 系列文章目录一、规划质量管理 - 关注工作需要达到的质量二、管理…

【golang/g3n】3D游戏引擎G3N的windows安装与测试

目录 说在前面安装测试 说在前面 操作系统&#xff1a;win 11go version&#xff1a;go1.21.5 windows/amd64g3n版本&#xff1a;github.com/g3n/engine v0.2.0其他&#xff1a;找了下golang 3d相关的库&#xff0c;目前好像就这个比较活跃 安装 按照官方教程所说&#xff0c;…

linux 开机启动流程

1.打开电源 2.BIOS 有时间和启动方式 3.启动Systemd 其pid为1 4.挂载引导分区 /boot 5.启动各种服务 如rc.local

Ubuntu 常用命令之 ls 命令用法介绍

Ubuntu ls 命令用法介绍 ls是Linux系统下的一个基本命令&#xff0c;用于列出目录中的文件和子目录。它有许多选项可以用来改变列出的内容和格式。 以下是一些基本的ls命令选项 -l&#xff1a;以长格式列出文件&#xff0c;包括文件类型、权限、链接数、所有者、组、大小、最…

持续集成交付CICD:Jenkins使用GitLab共享库实现基于Ansible的CD流水线部署前后端应用

目录 一、实验 1.部署Ansible自动化运维工具 2.K8S 节点安装nginx 3.Jenkins使用GitLab共享库实现基于Ansible的CD流水线部署前后端应用 二、问题 1.ansible安装报错 2.ansible远程ping失败 3. Jenkins流水线通过ansible命令直接ping多台机器的网络状态报错 一、实验 …

C语言:猜数字游戏

#include<stdio.h> #include<time.h> #include<stdlib.h> void menu() {printf("********************************\n");printf("****** 1.开始 2.退出 ******\n");printf("********************************\n"); } voi…

Swin-Transformer 在图像识别中的应用

1. 卷积神经网络简单介绍 图像识别任务主要利用神经网络对图像进行特征提取&#xff0c;最后通过全连接层将特征和分类个数进行映射。传统的网络是利用线性网络对图像进行分类&#xff0c;然而图像信息是二维的&#xff0c;一般来说&#xff0c;图像像素点和周围邻域像素点相关…

2机5节点系统潮流MATLAB仿真

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 电力系统潮流计算是电力系统最基本的计算&#xff0c;也是最重要的计算。所谓潮流计算&#xff0c;就是已知电网的接线方式与参数及运行条件&#xff0c;计算电力系统稳态运行各母线电压、各支路电流、功率及…

接口自动化测试实操【设置断言思路】

1 断言设置思路 这里总结了我在项目中常用的5种断言方式&#xff0c;基本可能满足90%以上的断言场景&#xff0c;具体参见如下脑图&#xff1a; 在这里插入图片描述 下面分别解释一下图中的五种思路&#xff1a; 1&#xff09; 响应码 对于http类接口&#xff0c;有时开发人…

Spring AOP 和 Spring Boot 统一功能处理

文章目录 Spring AOP 是什么什么是 AOPAOP 组成切面&#xff08;Aspect&#xff09;连接点&#xff08;Join Point&#xff09;切点&#xff08;Pointcut&#xff09;通知&#xff08;Advice&#xff09; 实现 Spring AOP添加 Spring AOP 框架支持execution表达式定义切面、切点…

Docker构建镜像时空间不足:/var/lib/docker,no space left on device

背景 在一次更新业务服务功能后&#xff0c;重新在服务器上构建微服务镜像&#xff0c;在构建镜像时报错空间不足&#xff1a; /var/lib/docker, no space left on device 赶紧用 df -h 看了下磁盘使用情况&#xff0c;果然&#xff0c; devicemapper 已经满了。。由于需要紧急…

使用Pytorch从零开始构建LoRA

引言 在这篇博文中&#xff0c;我将向大家展示如何使用Pytorch从头开始构建 LoRA。LoRA 是Low-Rank Adaptation或Low-Rank Adapters的缩写&#xff0c;它提供了一种高效且轻量级的方法来微调预先存在的语言模型。这包括BERT和RoBERTa等掩码语言模型&#xff0c;以及GPT、Llama…

基于循环神经网络长短时记忆(RNN-LSTM)的大豆土壤水分预测模型的建立

Development of a Soil Moisture Prediction Model Based on Recurrent Neural Network Long Short-Term Memory in Soybean Cultivation 1、介绍2、方法2.1 数据获取2.2.用于预测土壤湿度的 LSTM 模型2.3.土壤水分预测的RNN-LSTM模型的建立条件2.4.预测土壤水分的RNN-LSTM模型…

蓝桥杯专题-真题版含答案-【三角螺旋阵】【干支记年法】【异或加密法】【金字塔】

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分…

内网渗透测试基础——Windows PowerShell篇

内网渗透测试基础——Windows PowerShell篇 1. Windows PowerShell基础 Windows PowerShell是一种命令行外壳程序和脚本环境&#xff0c;它内置在每个受支持的Windows版本中&#xff08;Windows7、Windows Server 2008 R2及更高版本&#xff09;&#xff0c;为Windows命令行使…

怎么使用会声会影?2024年最新使用会声会影的具体步骤

一听说视频剪辑我们就不由得联想到电影、电视等一些高端的视频剪辑技术&#xff0c;大家都觉得视频剪辑是一个非常复杂而且需要很昂贵的设备才可以完成的技术活&#xff0c;这对很多“门外汉”来说都可望而不可及。实际上&#xff0c;使用会声会影剪辑视频不仅是很多人都可以操…

Docker单机部署OceanBase

文章目录 说明机器软硬件要求指导文档本次部署环境说明 OceanBase单机部署&#xff08;Docker&#xff09;一&#xff1a;拉取 OceanBase 数据库相关镜像二&#xff1a;启动 OceanBase 数据库实例完整启动日志展示 三&#xff1a;连接实例遇到报错&#xff1a;没有mysql客户端 …

php查询数据库,并通过表格展示

第一步&#xff1a;创建数据库 创建一个数据库php-crud 第二步&#xff1a;创建数据库表 在数据库php-crud下创建一个歌曲表song /*Navicat Premium Data TransferSource Server : MariaDBSource Server Type : MariaDBSource Server Version : 100605 (10.6.5-M…

Windows7下双网卡绑定(双网络冗余)

1.首先需要电脑主机里至少有两张网卡。 2.打开计算机管理&#xff0c;点击左侧的设备管理器&#xff1a; 3.点击展开右侧的 网络适配器&#xff1a; 4.如下是我们即将需要进行绑定的两张网卡&#xff1a; 5.右键点击第一张网卡&#xff0c;选择属性&#xff1a; 6.选择 分组 栏…