vue实战027:子组件和父组件之间传值详解
toqiye 2024-10-01 22:59 1 浏览 0 评论
最近接了个新项目,更新可能会慢点了。。。今天继续Vue实战开发系列
现在开始写文章列表展示功能,这里我把筛选这块进行了子组件封装,所以在进行搜索时我们需要从父级获取到文章的相关信息,如更新年月,文章类型及个人分类等等信息,当点击搜索时将搜索到的结果返回给父级列表展示,下面我模拟了些数据进行操作。
什么是组件
在vue中, 可以根据项目需求将大部分相同操作的模块定义成组件,通过组件我们可以减少代码的编写,提高代码的复用率,而且组件之间也可以进行数据通信,这样就大大提升了项目效率。通常父组件的模板中包含子组件,父组件会正向的向子组件传递当前所需的数据,子组件接受到数据后对数据进行渲染和执行操作。
父组件向子组件传递数据
定义子组件
首先我先来创建一个子组件,通过时间、文章类型、个人分类或者关键词者用来筛选文章,这些数据需要重父级组件获取,vue中我们可以通过props属性来获取父级的数据,在props中定义你需要的数据。
<template> <div class="select"> <div class="condition"> <label>筛选:</label> <select class="yearSelect"> <option >不限</option> <option v-for="(year,id) in yearList" :key="id">{{year}}</option> </select> //...省略 <input type="text" placeholder="请输入标题关键词" v-model="keyword"> </div> <button @click="search">搜索</button> </div> </template> <script> export default { props:{ yearList:{ type:Array, default:[] }, //...省略 }, } </script> <style scoped> //...省略 </style>
select选框提示定义
通常我们会在select中写个默认提示信息,如我这里默认显示了年、月等信息,这样用户体验更好,那么这个要怎么实现呢,select中没有input中的placeholder属性,所以这里我们需要来通过修改第一个option属性来实现select提示功能(将值设置为空,样式设置为隐藏)。
<select class="yearSelect"> <option value="" style="display:none">年</option> //值为空,样式为隐藏 <option >不限</option> <option v-for="(year,id) in yearList" :key="id">{{year}}</option> </select>
props数组传递
父组件向子组件传递数据的过程就是通过props来实现的,props的值可以是两种,一种是数组,一种是对象。在传递Array类型数据时,我们需要注意的是如果子组件接受的数据是props定义的default时,我们会遇到错误提示:
这时因为props的 default 参数中,数组/对象的默认值相当于一个工厂函数返回,所以这里我们可以稍微的改动下,用箭头函数来定义default参数(这样就不会报错了):
props:{ yearList:{ type:Array, default:() =>[], }, //...省略 },
在父组件中引入子组件
定义好了子组件,我们就需要将其引入到需要使用的父组件中去了,使用import引入组件然后在components声明该组件,数据通过v-bind动态绑定,:yearList="yearList"就是将父组件中的yearList赋给子组件中的yearList。
#template <Select :yearList="yearList"></Select> #JavaScript import Select from '@/components/back/select' components:{ Select, }, data(){ return{ yearList:['2019','2018','2017','2016'], //...pass } },
子组件向父组件传递数据
子组件抛出数据
即然父组件可以想子组件传递数据,那么子组件当然也应该可以向父组件传递数据了,在子组件中向父组件传值可以使用this.$emit("function",param); //其中function为父组件定义函数,param为需要传递参数。给搜索按钮绑定点击事件,点击搜索按钮,将子组件模拟的数据artical传给父组件,然后在父组件展示。
<template> <div class="select"> //...pass <button @click="search">搜索</button> </div> </template> <script> export default { props:{ //...pass }, data(){ return{ keyword:'', artical:['Django实战010:搭建图片服务器详解','Django实战009:文件上传实现过程详解','Django实战008:基于Token的验证使用','Django实战007:Cookie搭配Session使用','Django实战006:Cookie设置及跨域问题处理','Django实战005:注册加密及登陆验证问题','Django实战004:跨域请求问题解决','Django实战003:为什么使用Serializer序列化器','Django实战002:配置参数设置','Django实战001:开发环境搭建'], } }, methods:{ search(){ this.$emit('articalList',this.artical) } } } </script> <style scoped> //...pass </style>
父组件监听数据
这里我定义了一个articalList,回到父组件,我们通过v-on来监听articalList,简写成@articalList="getList",getList为父组件定义的函数--用于接收子组件传值并进行相应数据处理,你也可以直接定义articalList,方便后续查询对应。
#template <Select :yearList="yearList" @articalList="getList" ></Select> #JavaScript import Select from '@/components/back/select' data(){ return{ articalList:'', } }, components:{ Select, }, methods:{ getList(data){ this.articalList=data } }
父子组件相互传值总结
父组件向子组件传值
- 子组件在props中创建一个属性,用来接收父组件传过来的值
- 父组件中注册子组件
- 在子组件标签中绑定子组件props中创建的属性并将值赋给该属性
子组件向父组件传值
- 子组件中通过事件触发
- 将需要传的值通过$emit传给响应自定义事件的方法
- 在子组件标签上绑定对自定义事件对数据进行监听
欢迎关注本人的公众号:编程手札,文章也会在公众号更新
相关推荐
- 完美解决MAC电脑空间不足问题(完美解决mac电脑空间不足问题的办法)
-
很多用MAC(苹果笔记本)电脑的人,特别是做iOS开发的,都会遇到一个头疼的问题,那就是电脑磁盘空间不足的问题。这个问题也困扰了我好久,我的开发机是256G的SSD(固态硬盘),但是用着用着就会空间不...
- 系统清理软件Omni Remover for Mac版
-
内容介绍你是否需要一款可以帮你清理Mac系统顽固垃圾的工具呢?试试OmniRemoverforMac吧!OmniRemoverMac版是一款运行在Mac平台上的系统清理软件。OmniRem...
- mac上一款好用的多功能系统清理软件Omni Remover for Mac
-
mac上一款好用的多功能系统清理软件——OmniRemoverforMac。OmniRemovermac破解版是Mac平台上的一款软件清理工具。OmniRemoverMac版专为优化内存...
- 清理重建mac OS图标缓存(mac系统清空)
-
关于macos缓存问题你了解多少?今天macdown小编带大家了解下有关Mac清除图标缓存的相关知识!你知道吗?为了提升图形界面加载速度,默认情况下macOS针对Finder和Dock中的...
- iOS 9 人机界面指南(五):图标与图形设计
-
来人人都是产品经理【起点学院】,BAT实战派产品总监手把手系统带你学产品、学运营。文章索引5.1图标与图像尺寸(IconandImageSizes)5.2应用图标(AppIcon)5.2....
- 你中招了吗?盘古团队发布XcodeGhost病毒检测应用
-
最近大批知名iOS应用被感染XcodeGhost病毒事件闹得沸沸扬扬,虽然该病毒作者发表声明称,XcodeGhost源于自己的实验,没有任何威胁性行为,同时公开了源代码。但依然无法消除众多用户的担忧,...
- iOS应用感染Xcode真是无恶意实验?感染APP最新名单及版本号
-
前瞻科技快讯9月19日消息,一向号称是最安全的iOS真的不安全了?对于这两天闹得沸沸扬扬的多款iOS应用感染XcodeGhost病毒事件,今日凌晨4点左右,网友@XcodeGhost-Author在微...
- 苹果应用签名失败怎么处理(ios应用签名什么意思)
-
在移动应用开发过程中,苹果应用签名失败是一种常见的问题,它可能由多种原因引起。本文将介绍一些处理苹果应用签名失败的方法,帮助开发者解决这个问题。检查证书和描述文件:首先,开发者应该检查使用的证书和描述...
- 好用的系统扫描和清理工具推荐:OS Cleaner Pro for Mac
-
为大家推荐一款全面的系统扫描和清理工具,OSCleanerProforMac...
- 系统清理软件 Omni Remover for Mac
-
你是否需要一款可以帮你清理Mac系统顽固垃圾的工具呢?试试OmniRemoverforMac吧!OmniRemoverMac版是一款运行在Mac平台上的系统清理软件。OmniRemover...
- 优秀的Mac系统清理软件(mac清理系统占用空间)
-
OmniRemoverforMac是一款优秀的系统清理软件,功能有清洁卸载膨胀且顽固的应用程序,在macOSCatalina上清除32位不兼容的应用程序,iTunes,Xcode和Sketc...
- 苹果app安卓apk应用内用微信登录游戏时会显示登录失败怎么解决?
-
解决苹果iOS应用和安卓APK应用在使用微信授权登录时出现“登录失败,签名不一致”的问题,可以按照以下步骤进行排查和解决:1.核实AppID和AppSecret:确保iOS和安卓项目中使用的微信开放...
- Cleaner for Xcode(遗留废弃文件清理工具)
-
Mac上的Xcode总是占用很大空间,并且用的时间越久越大!可通过删除不需要的和不建议使用的文件来帮助您加快Xcode的运行速度,你可以每月或者每周运行一次进行清理。有需要的朋友,赶快来下载吧~Cle...
- Cleaner for Xcode mac(xcode清理工具)
-
Xcode文件太多,如何检测清理?试试CleanerforⅩcode吧!CleanerforXcodeforMac可以检测您的Xcode占用磁盘的情况,统计各个部件所占用的空间。并帮助您...
- 柠檬清理一款Mac设备必备的实用工具
-
简介柠檬清理是针对macOS系统专属制定的清理工具。主要功能包括重复文件和相似照片的识别、软件的定制化垃圾扫描、可视化的全盘空间分析、内存释放、浏览器隐私清理以及设备实时状态的监控等。重点聚焦清理功能...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- 完美解决MAC电脑空间不足问题(完美解决mac电脑空间不足问题的办法)
- 系统清理软件Omni Remover for Mac版
- mac上一款好用的多功能系统清理软件Omni Remover for Mac
- 清理重建mac OS图标缓存(mac系统清空)
- iOS 9 人机界面指南(五):图标与图形设计
- 你中招了吗?盘古团队发布XcodeGhost病毒检测应用
- iOS应用感染Xcode真是无恶意实验?感染APP最新名单及版本号
- 苹果应用签名失败怎么处理(ios应用签名什么意思)
- 好用的系统扫描和清理工具推荐:OS Cleaner Pro for Mac
- 系统清理软件 Omni Remover for Mac
- 标签列表
-
- systemproperties (65)
- show-overflow-tooltip (53)
- canvas图片 (57)
- npm版本管理 (61)
- localhost:15672 (59)
- materialtheme (86)
- node-ssh (68)
- 全局路由守卫 (57)
- springbootcachemanager (57)
- 图床搭建 (62)
- vue3addeventlistener (60)
- mybatisselectone (78)
- css圆形进度条 (69)
- androidble蓝牙开发 (62)
- vue-router的实现原理 (53)
- usememo (53)
- log4j.xml (54)
- maven跳过测试打包 (57)
- npmjsencrypt (55)
- android-gif-drawable (60)
- appender-ref (64)
- springbootmockito (68)
- css边框渐变色和圆角 (58)
- gsonfastjson (59)
- 依赖注入的方式 (62)