Vue将props值实时传递 并可修改的操作


Posted in Javascript onAugust 09, 2020

我们都知道props值是只读的,子组件内不可直接修改,会报错滴

但是很多时候这个值是需要子组件主动修改的,一般我们会使用this.$emit()去修改,但比较麻烦

下面这种方式可以实现:

1、父组件实时修改props值时,子组件可以接收到改变

2、子组件可主动修改该值

<div>{{RealValue}}</div>

 props: [ "value" ],
 watch: {
 value (v) {
  this.RealValue = v
 }
 },
 data () {
 return {
  RealValue: this.value
 }
 }

原理很简单,就是使用一个RealValue作为实际显示的参数,并且使用watch实时把value值传给他

PS:这里的值是字符串格式,如果value是对象或者数组,watch处要写成:

watch: {
 value:{
  deep: true,
  handler(v) {
   this.RealValue = v
  }
 }
 },

补充知识:vue组件内数值做watch监听,首次监听不到的问题

在vue中会使用很多子组件,有时因为组件的类型等原因会导致数据监听不到的情况,下面列举几种问题和解决方法

子组件内数据首次监听不到时,可以使用【immediate】方法,其值是true或false;immediate:true代表如果在 wacth 里声明了之后,就会立即先去执行里面的handler方法

watch:{
 uploadImageUrl:{
 immediate:true,
 handler:function(newval){
 this.uploadShowImageUrl = newval;
 }
 }
},

子组件的深度监听函数【deep】,其值是true或false;确认是否深入监听。deep的意思就是深入观察,监听器会一层层的往下遍历,给对象的所有属性都加上这个监听器(受现代 JavaScript 的限制 (以及废弃 Object.observe),Vue 不能检测到对象属性的添加或删除)

watch:{
 uploadImageUrl:{
 deep:true,
 handler:function(newval){
 this.uploadShowImageUrl = newval;
 }
 }
},

给组件内的props为对象的数据设置默认值

如果prop中接收的数据为对象或者数组类型,是不可以像字符串等【default:''】直接指定default值的,会报【Invalid default value for prop “defaultProp”: Props with type Object/Array must use a factory function to return the default value.】错误,修正方法如下

defaultProp: {
 type: Object,
 default: function(){
  return {
   children: 'children',
   label: 'name'
  }
 }
},

以上这篇Vue将props值实时传递 并可修改的操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript 原型与继承说明
Jun 09 Javascript
javascript 数字格式化输出的实现代码
Dec 10 Javascript
jQuery使用height()获取高度需要注意的地方
Dec 13 Javascript
详解js跨域原理以及2种解决方案
Dec 09 Javascript
JavaScript的Backbone.js框架环境搭建及Hellow world示例
May 07 Javascript
javascript实现瀑布流动态加载图片原理
Aug 12 Javascript
获取select的value、text值的简单示例(jquery与javascript)
Dec 07 Javascript
基于复选框demo(分享)
Sep 27 Javascript
vue-cli2.9.3 详细教程
Apr 23 Javascript
vue elementUI使用tabs与导航栏联动
Jun 21 Javascript
vue.js 打包时出现空白页和路径错误问题及解决方法
Jun 26 Javascript
JS 创建对象的模式实例小结
Apr 28 Javascript
js实现轮播图效果 纯js实现图片自动切换
Aug 09 #Javascript
vue 子组件watch监听不到prop的解决
Aug 09 #Javascript
vue 重塑数组之修改数组指定index的值操作
Aug 09 #Javascript
bootstrap-closable-tab可实现关闭的tab标签页插件
Aug 09 #Javascript
bootstrap实现tab选项卡切换
Aug 09 #Javascript
vue动画—通过钩子函数实现半场动画操作
Aug 09 #Javascript
js利用iframe实现选项卡效果
Aug 09 #Javascript
You might like
PHP 木马攻击防御技巧
2009/06/13 PHP
php 自写函数代码 获取关键字 去超链接
2010/02/08 PHP
php递归使用示例(php递归函数)
2014/02/14 PHP
PHP使用递归生成文章树
2015/04/21 PHP
php源码分析之DZX1.5字符串截断函数cutstr用法
2015/06/17 PHP
PHP统计目录中文件以及目录中目录大小的方法
2016/01/09 PHP
php中10个不同等级压缩优化图片操作示例
2016/11/14 PHP
laravel自定义分页效果
2017/07/23 PHP
总结PHP中初始化空数组的最佳方法
2019/02/13 PHP
thinkphp5实现微信扫码支付
2019/12/23 PHP
编写针对IE的JS代码两种编写方法
2013/01/30 Javascript
原生js实现百叶窗效果及原理介绍
2016/04/12 Javascript
JavaScript记录光标在编辑器中位置的实现方法
2016/04/22 Javascript
js实现的万能flv网页播放器代码
2016/04/30 Javascript
js+css3实现旋转效果
2017/01/20 Javascript
nodejs中向HTTP响应传送进程的输出
2017/03/19 NodeJs
easyui-datagrid特殊字符不能显示的处理方法
2017/04/12 Javascript
解决vue移动端适配问题
2018/12/12 Javascript
Vue-cli3.x + axios 跨域方案踩坑指北
2019/07/04 Javascript
原生小程序封装跑马灯效果
2020/10/21 Javascript
python实现二分查找算法
2017/09/21 Python
详谈pandas中agg函数和apply函数的区别
2018/04/20 Python
python3实现随机数
2018/06/25 Python
深入浅析python 协程与go协程的区别
2019/05/09 Python
python opencv实现证件照换底功能
2019/08/19 Python
Python如何将函数值赋给变量
2020/04/28 Python
python实现人像动漫化的示例代码
2020/05/17 Python
Python unittest单元测试openpyxl实现过程解析
2020/05/27 Python
详解CSS3中的box-sizing(content-box与border-box)
2019/04/19 HTML / CSS
雅诗兰黛(Estee Lauder)英国官方网站:世界顶级化妆品牌
2016/12/29 全球购物
护士自我鉴定怎么写
2014/02/07 职场文书
婚礼男方父母答谢词
2015/09/29 职场文书
2015年社区反邪教工作总结
2015/10/14 职场文书
八年级物理教学反思
2016/02/19 职场文书
Python中的套接字编程是什么?
2021/06/21 Python
nginx访问报403错误的几种情况详解
2022/07/23 Servers