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 相关文章推荐
6个DIV 135或246间隔一秒轮番显示效果
Jul 24 Javascript
JS弹出窗口插件zDialog简单用法示例
Jun 12 Javascript
Angular2学习笔记——详解路由器模型(Router)
Dec 02 Javascript
React Native 真机断点调试+跨域资源加载出错问题的解决方法
Jan 18 Javascript
vue引用js文件的多种方式(推荐)
May 17 Javascript
jQuery实现获取及设置CSS样式操作详解
Sep 05 jQuery
详解vuex状态管理模式
Nov 01 Javascript
element-ui 中使用upload多文件上传只请求一次接口
Jul 19 Javascript
vue请求服务器数据后绑定不上的解决方法
Oct 30 Javascript
如何正确理解vue中的key详解
Nov 02 Javascript
javascript设计模式 ? 观察者模式原理与用法实例分析
Apr 22 Javascript
jquery实现简单每周轮换的日历
Sep 10 jQuery
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
利用文件属性结合Session实现在线人数统计
2006/10/09 PHP
php 在windows下配置虚拟目录的方法介绍
2013/06/26 PHP
jQuery(1.3.2) 7行代码搞定跟随屏幕滚动的层
2009/05/21 Javascript
仅IE6/7/8中innerHTML返回值忽略英文空格的问题
2011/04/07 Javascript
jquery简单的拖动效果实现原理及示例
2013/07/26 Javascript
JS操作Cookies的小例子
2013/10/15 Javascript
javascript实现网页背景烟花效果的方法
2015/08/06 Javascript
jQuery实现自动切换播放的经典滑动门效果
2015/09/12 Javascript
JQuery ztree带筛选、异步加载实例讲解
2016/02/25 Javascript
JS原型对象的创建方法详解
2016/06/16 Javascript
详解基于javascript实现的苹果系统底部菜单
2016/12/02 Javascript
js监听input输入框值的实时变化实例
2017/01/26 Javascript
详解bootstrap的modal-remote两种加载方式【强化】
2017/01/27 Javascript
vue2.0开发入门笔记之.vue文件的生成和使用
2017/09/19 Javascript
微信小程序实现倒计时调用相机自动拍照功能
2018/06/10 Javascript
JSONP原理及应用实例详解
2018/09/13 Javascript
Vue中的v-for指令不起效果的解决方法
2018/09/27 Javascript
JS二级菜单不同实现方法分析【4种方法】
2018/12/21 Javascript
判断js数据类型的函数实例详解
2019/05/23 Javascript
json字符串对象转换代码实例
2019/09/28 Javascript
vue iview实现动态新增和删除
2020/06/17 Javascript
JavaScript实现拖动对话框效果的实现代码
2020/10/12 Javascript
[15:39]教你分分钟做大人:龙骑士
2014/10/30 DOTA
python使用点操作符访问字典(dict)数据的方法
2015/03/16 Python
python读取txt文件中特定位置字符的方法
2018/12/24 Python
对python中基于tcp协议的通信(数据传输)实例讲解
2019/07/22 Python
纯CSS实现聊天框小尖角、气泡效果
2014/04/04 HTML / CSS
印度购买眼镜和太阳镜网站:Coolwinks
2018/09/26 全球购物
匈牙利最大的健身制造商和销售商:inSPORTline
2018/10/30 全球购物
北美最大的参茸药食商城:德成行
2020/12/06 全球购物
将"引用"作为函数返回值类型的格式、好处和需要遵守的规则
2016/02/09 面试题
婚前协议书范本
2014/04/15 职场文书
理想点亮人生演讲稿
2014/05/21 职场文书
《红领巾真好》教学反思
2016/02/16 职场文书
Python3接口性能测试实例代码
2021/06/20 Python
sentinel支持的redis高可用集群配置详解
2022/04/01 Redis