本文主要介绍一下组件对props(即传入参数)的处理。

props是父组件给子组件传递的参数,而子组件需要修改props的场景非常多,但props并不像组件自己的属性那样可以随意修改(因为props会同时影响父组件和子组件),props的修改必须遵循以下规则:

  1. 子组件不能直接修改props;
  2. 如果props是对象,子组件可以修改对象的属性值(包括增加删除属性);
  3. 如果props是数组,子组件可以修改数组的元素(包括增加删除元素),如果元素是对象,还可以修改元素的属性值(包括增加删除元素属性)。

下面上示例代码:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>props</title><script src="https://cdn.bootcss.com/vue/2.6.10/vue.js"></script>
</head>
<body>
<div id="app"><div><button type="button" @click="show">container</button></div><container :parama="paramA" :paramb="paramB" :paramc="paramC" :paramd="paramD"></container>
</div>
<script>Vue.component('container', {template: '<div><br><button type="button" @click="changeA">change paramA</button>' +'<br><br><button type="button" @click="changeB">change paramB</button>' +'<br><br><button type="button" @click="changeC">change paramC</button>' +'<br><br><button type="button" @click="changeD">change paramD</button></div>',props: ["parama", "paramb", "paramc", "paramd"],methods: {changeA: function () {//触发时会报错this.parama = "paramA changed";},changeB: function () {this.paramb.key = "key changed";this.paramb.value = "value changed";//上下两种写法是等价的// this.$set(this.paramb, "key", "key changed");// this.$set(this.paramb, "value", "value changed");this.paramb.add = "new attr";delete this.paramb.removeAttr;},changeC: function () {this.paramc.push(4);this.paramc[0] = -1;//上下两种写法是等价的// this.$set(this.paramc, 0, -1);},changeD: function () {this.paramd.push({lon: 40,lat: 70});this.paramd[0] = {lon: 20,lat: 50};//上下两种写法是等价的// this.$set(this.paramd, 0, {//     lon: 20,//     lat: 50// });}}});new Vue({el: '#app',data: {paramA: "paramA",paramB: {key: "it is key",value: "it is value",removeAttr: "it is remove"},paramC: [1, 2, 3],paramD: [{lon: 30,lat: 60}]},methods: {show: function () {console.log("paramA is " + this.paramA);console.log("paramB.key is " + this.paramB.key);console.log("paramB.value is " + this.paramB.value);if (this.paramB.add) {console.log("paramB.add is " + this.paramB.add);}if (this.paramB.removeAttr) {console.log("paramB.removeAttr is " + this.paramB.removeAttr);}console.log("paramC.length is " + this.paramC.length);console.log("paramC[0] is " + this.paramC[0]);console.log("paramD.length is " + this.paramD.length);console.log("paramD[0].lon is " + this.paramD[0].lon);console.log("paramD[0].lat is " + this.paramD[0].lat);if (this.paramD.length === 2) {console.log("paramD[1].lon is " + this.paramD[1].lon);console.log("paramD[1].lat is " + this.paramD[1].lat);}}}});
</script>
</body>
</html>

当尝试直接修改props时(对应上例为点击"change paramA"按钮),控制台会报错:

当执行其他修改动作时(对应上例为点击除"change paramA"外的其他按钮),控制台没有报错,然后在父组件中查看props是否成功修改(点击"container"按钮),可以看到父组件传入的props都修改成功了:

Vue学习笔记(十九)——组件props信息的修改相关推荐

  1. vue学习笔记-03-浅谈组件-概念,入门,如何用props给组件传值?

    vue学习笔记-03-浅谈组件-概念,入门,如何用props给组件传值? 文章目录 vue学习笔记-03-浅谈组件-概念,入门,如何用props给组件传值? 什么是组件? 为什么要使用组件? 如何使用 ...

  2. Polyworks脚本开发学习笔记(十九)-将数据对象与参考对象对齐的方法

    Polyworks脚本开发学习笔记(十九)-将数据对象与参考对象对齐的方法 把开发手册理了一遍,发现还有几个点没有记录下来,其中一个就是使用点对的粗对齐和使用参考目标的精确对齐.为了把这个学习笔记凑够 ...

  3. Mr.J-- jQuery学习笔记(十九)--自定义动画实现图标特效

    之前有写过自定义动画Mr.J-- jQuery学习笔记(十八)--自定义动画 这次实现一个小demo 图标特效 页面渲染 <!DOCTYPE html> <html lang=&qu ...

  4. Vue学习笔记三(组件间通信)

    主要通信方式包括: 1.props属性 父---->子,子传父也可以通过方法实现,传递的可以是一个数据对象,或者一个方法,是方法的时候子组件调用该方法,通过传参方式将数据传递给父组件. < ...

  5. 乐优商城学习笔记十九-商品详情(二)

    2.页面静态化 2.1.简介 2.1.1.问题分析 现在,我们的页面是通过Thymeleaf模板引擎渲染后返回到客户端.在后台需要大量的数据查询,而后渲染得到HTML页面.会对数据库造成压力,并且请求 ...

  6. vue学习笔记十:Vue中引入jquery

    文章目录 前言 一.引入方式 1.使用Vue CLI 创建的项目 2.直接引入vue方式的项目 二.使用方法 1.使用Vue CLI 创建的项目 2.直接引入vue方式的项目 总结 前言 本篇实现vu ...

  7. python 学习笔记十九 django深入学习四 cookie,session

    缓存 一个动态网站的基本权衡点就是,它是动态的. 每次用户请求一个页面,Web服务器将进行所有涵盖数据库查询到模版渲染到业务逻辑的请求,用来创建浏览者需要的页面.当程序访问量大时,耗时必然会更加明显, ...

  8. 【theano-windows】学习笔记十九——循环神经网络

    前言 前面已经介绍了RBM和CNN了,就剩最后一个RNN了,抽了一天时间简单看了一下原理,但是没细推RNN的参数更新算法BPTT,全名是Backpropagation Through Time. [注 ...

  9. javascript学习笔记(十九) 节点的操作

    包括节点的创建.添加.移除.替换.复制 本节要用到的html例子 1 <ul id="myList"> 2 <li>项目一</li> 3 < ...

最新文章

  1. Redis 实现限流的三种方式
  2. 最优化理论与方法(part3)--矩阵的Rayleigh商
  3. 牛客题霸 [最长公共子序列] C++题解/答案
  4. obs可以装手机吗?_原神PC和手机数据互通吗 PC和手机可以一起玩吗
  5. P5735 【深基7.例1】距离函数(python3实现)
  6. 【华为云技术分享】竞享实例:让你尽享云服务的“鱼”和“熊掌”
  7. export default 打包_贵阳【打包扣】价格
  8. boost noncopyable实现禁止类拷贝
  9. win7打印机显示服务器脱机怎么办,手把手教你设置win7系统网络打印机脱机的修复教程...
  10. 耐人寻味的Temp文件(二)
  11. operator的理解
  12. linux服务器之间的文件同步(双向同步unison+inotify)
  13. verilog从txt中读取_将Verilog中的二进制文件数据读入2D数组
  14. 带你学习如何更好的使用uni-app(一)
  15. 在Centos下安装java jdk
  16. Pro SQL Server 2008 Mirroring
  17. INT303 Big Data 个人笔记
  18. Vi编辑器的常用命令1(文件内操作)
  19. python简单程序实例-python简单项目实例
  20. 转:数据可视化怎么学?看完本文你将理解透彻!

热门文章

  1. uniapp——签到、登录
  2. 金牌瘾这也算过了吧,全民健身该开始了吧
  3. python绘五环,还不过来Look一下吗
  4. 世界领先的无人驾驶自主测绘船完成从旧金山到夏威夷的跨洋航行
  5. vscode 调试flutter 出现错误Run with --stacktrace option to get the stack trace. Run with --info or --dubeg
  6. 2022(CSS,JS)练手——翻转卡片的实现
  7. workLog: 用seqkit快速进行简单的抗体NGS测序数据分析
  8. 【检测宝典】之二:选择Lims系统,这三点误区你一定没想到
  9. Python 情感分析
  10. cookie中的PHPSESSID