详细聊聊vue中组件的props属性


Posted in Vue.js onNovember 02, 2021

今天这篇文章,让你彻底学会props属性……

props主要用于组件的传值,他的工作就是为了接收外面传过来的数据,与data、el、ref是一个级别的配置项。

问题一:那props具体是怎么使用呢?原理又是什么呢?往下看

1、【定义被调用组件】首先,我们先定义一个person组件,用于显示个人信息的组件,我们放了一个人的姓名,性别,以及年龄,定义好这个组件之后,就可以等待其他组件进行调用。那么既然别的组件可以调用,我们就需要再定义一个props属性,用于接收别的组件传进来的值。

详细聊聊vue中组件的props属性

 注意:组件中name、sex、age都是一个prop,将三个属性放到一起,就是props,这就是props的由来,是prop的复数形式,代表多个prop属性的集合。

 2、【调用组件】此时我们再定义一个info组件,用于展示这个人的基本信息,进行对person组价的调用实现信息的展示,分为下图四个步骤进行调用。并传入参数

详细聊聊vue中组件的props属性

 3、【看效果】传入成功。

详细聊聊vue中组件的props属性

 问题二:那如果我们想给年龄加1岁,怎么实现?

我们可能会直接这样加1

详细聊聊vue中组件的props属性

 看效果是否能实现,变成19,看下图显然是不正确的。因为你传入的年龄是个字符串18,所以加1只会在18后面进行拼接。

详细聊聊vue中组件的props属性

 然后有的人说,那传数字,怎么传数字呢?很简单,一个符号搞定。

我们只需要在age前面加上冒号 :他就会只识别双引号里面的东西18 ,否则识别的是双引号18

详细聊聊vue中组件的props属性

 看下效果,此时就成功了。

详细聊聊vue中组件的props属性

 问题三:对于年龄这一类型,我们最希望拿到的是什么数据类型?

肯定是数字类型,但是有人非要传字符串类型,就会影响我们对年龄的计算,比如上面的加1……那么我们如何限制类型呢?

 这时候props不能再用[]去定义,需要用{},因为限制类型时,props就是作为一个对象去使用;

下面就是我们将三个属性分别做了限制。

详细聊聊vue中组件的props属性

 我们把年龄做了number类型限制后,再传入字符串18,看有什么变化?

详细聊聊vue中组件的props属性

 此时发现控制台,会报错,显示age的数据类型不匹配。

详细聊聊vue中组件的props属性

 虽然不影响展示,但是会报错。这可以给我们提供一个明确的提示。方便我们规范的传入数据。

 详细聊聊vue中组件的props属性

 问题四:可以限制类型,那是不是也可以限制是否必传呢?

 答:当然可以。

假设姓名必传,其他非必传。

类型属性:type:xx

必传属性:required:true

默认属性:default:xx

详细聊聊vue中组件的props属性

 name必传,那么我们不传试试,年龄不传默认18

详细聊聊vue中组件的props属性

 结果,控制台同样报错,提示,name是必传属性。年龄我们没传,也成功展示的是默认值,19是因为一开始对年龄进行了加1操作,这样我们就成功对属性进行了限制。

详细聊聊vue中组件的props属性

 详细聊聊vue中组件的props属性

对以上总结:

props在接收数据的同时,对数据进行了类型限制+默认值的指定+必要性的限制

问题五:props接收的属性值可以修改吗?

答:不可以

我们添加一个button,以及点击事件

详细聊聊vue中组件的props属性

 注意:我们要访问props里面的属性值,通过this.即可找到

 详细聊聊vue中组件的props属性

 查看结果,发现页面可以显示,但是控制台报错,因此它是不可修改的

详细聊聊vue中组件的props属性

详细聊聊vue中组件的props属性

 问题六:必须要修改props属性值,怎么办?

 答:通过data去间接修改

我们在data里面重新定义一个变量去接收props属性。这个变量最好不要重名,重名的话,优先获取props属性值,优先级props>data。然后我们在操作或者html绑定值的时候,都去操作data里面新定义的变量

详细聊聊vue中组件的props属性

 此时可以看到,修改成功,也没有报错:

详细聊聊vue中组件的props属性

 总结:配置项props

-------让组件接收外部传来的数据

 接收数据三种方式:

(1)只接收:props: ['name','age','sex']

(2)接收并限制类型:props: { "name":Number }

(3)限制类型、限制必要性指定默认值:

props:{
        "name":{
            type:String,
            required:true
        },
        "age":{
            type:Number,
            default:18
        },
        "sex":{
            type:String,
            default:'男'
        },
    },

注意:props是只读的,vue底层会检测你对props的修改,如果进行了修改,控制台会报错,必须修改,就复制一份到data中,通过data去修改数据。

总结

到此这篇关于vue中组件的props属性的文章就介绍到这了,更多相关vue组件的props属性内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Vue.js 相关文章推荐
vue在图片上传的时候压缩图片
Nov 18 Vue.js
实用的 vue tags 创建缓存导航的过程实现
Dec 03 Vue.js
vue中实现点击空白区域关闭弹窗的两种方法
Dec 30 Vue.js
浅谈Vue开发人员的7个最好的VSCode扩展
Jan 20 Vue.js
如何在Vue项目中添加接口监听遮罩
Jan 25 Vue.js
Vue 数据响应式相关总结
Jan 28 Vue.js
vue实现简单数据双向绑定
Apr 28 Vue.js
关于vue中如何监听数组变化
Apr 28 Vue.js
vue基于Teleport实现Modal组件
May 31 Vue.js
vue3中provide && inject的使用
Jul 01 Vue.js
一篇文章告诉你如何实现Vue前端分页和后端分页
Feb 18 Vue.js
Vue Mint UI mt-swipe的使用方式
Jun 05 Vue.js
一定要知道的 25 个 Vue 技巧
简单聊聊Vue中的计算属性和属性侦听
Oct 05 #Vue.js
SSM VUE Axios详解
vue使用Google Recaptcha验证的实现示例
Vue鼠标滚轮滚动切换路由效果的实现方法
Aug 04 #Vue.js
Vue3.0 手写放大镜效果
vue项目多环境配置(.env)的实现
You might like
WinXP + Apache +PHP5 + MySQL + phpMyAdmin安装全功略
2006/07/09 PHP
vBulletin Forum 2.3.xx SQL Injection
2006/10/09 PHP
利用 window_onload 实现select默认选择
2006/10/09 PHP
Codeigniter框架的更新事务(transaction)BUG及解决方法
2014/07/25 PHP
详解thinkphp实现excel数据的导入导出(附完整案例)
2016/12/29 PHP
php封装db类连接sqlite3数据库的方法实例
2017/12/19 PHP
Code:loadScript( )加载js的功能函数
2007/02/02 Javascript
fix-ie5.js扩展在IE5下不能使用的几个方法
2007/08/20 Javascript
js中if语句的几种优化代码写法
2011/03/12 Javascript
Node.js抓取中文网页乱码问题和解决方法
2015/02/10 Javascript
百度地图自定义控件分享
2015/03/04 Javascript
js获取url传值的方法
2015/12/18 Javascript
Javascript将数值转换为金额格式(分隔千分位和自动增加小数点)
2016/06/22 Javascript
解决vue.js 数据渲染成功仍报错的问题
2018/08/25 Javascript
微信小程序map组件结合高德地图API实现wx.chooseLocation功能示例
2019/01/23 Javascript
layui实现form表单同时提交数据和文件的代码
2019/10/25 Javascript
electron+vue实现div contenteditable截图功能
2020/01/07 Javascript
Express 配置HTML页面访问的实现
2020/11/01 Javascript
vue-calendar-component 封装多日期选择组件的实例代码
2020/12/04 Vue.js
[19:14]DOTA2 HEROS教学视频教你分分钟做大人-维萨吉
2014/06/24 DOTA
Python随手笔记之标准类型内建函数
2015/12/02 Python
Python中的Django基本命令实例详解
2018/07/15 Python
python实现代码统计器
2019/09/19 Python
细数nn.BCELoss与nn.CrossEntropyLoss的区别
2020/02/29 Python
pycharm远程连接vagrant虚拟机中mariadb数据库
2020/06/05 Python
没编程基础可以学python吗
2020/06/17 Python
python Zmail模块简介与使用示例
2020/12/19 Python
python中uuid模块实例浅析
2020/12/29 Python
纯CSS3实现绘制各种图形实现代码详细整理
2012/12/26 HTML / CSS
在网上学习全世界最好的课程:Coursera
2017/11/07 全球购物
bonprix匈牙利:女士、男士和儿童服装
2019/07/19 全球购物
环保专业大学生职业规划设计
2014/01/10 职场文书
励志演讲稿3分钟
2014/08/21 职场文书
研究生就业推荐表导师评语
2014/12/31 职场文书
同步小康驻村工作简报
2015/07/20 职场文书
热爱劳动主题班会
2015/08/14 职场文书