vue 子组件修改data或调用操作


Posted in Javascript onAugust 07, 2020

<子组件 ref='xxx'></子组件>

父组件:

this.refs.xxx.子组件定义的方法()

外部:

vm.$refs.xxx.子组件定义的方法()

注意:子组件添加 ref 属性,父组件才可以通过 refs 获取.

补充知识:vue更新data值,如何重新渲染组件?

一:先介绍一下Vue.set()方法

注:如果从服务端返回的数据量较少,或者只有几个字段,可以用vue的set方法,如果数据量较大,请直接看第二种情况。

官网API是这样介绍的:

Vue.set(target,key,value)

参数:

{Object | Array} target

{string | number} key

{any} value

返回值:设置完后的新值

用法:

向响应式对象中添加一个属性,并确保这个新属性同样是响应式的,且触发视图更新。它必须用于向响应式对象上添加新属性,因为 Vue 无法探测普通的新增属性 (比如 this.myObject.newProperty = ‘hi')

注意对象不能是 Vue 实例,或者 Vue 实例的根数据对象。

我举个简单的小例子,把这种用法介绍一下:

一:data中定义一个对象:

data() {
 return {
  person:{
  age:10,
  name:'李古拉雷',
  sex:1
  }
 }
}

二:从服务端发起请求返回新数据对象:

person:{
 age:20,
 name:'高圆圆',
 sex:0
}

这时需要把这个对象实时渲染到页面中去

三:用 Vue.set()方法更新数据

如下所示:

methods: {
 getPerson(){
  this.$http({
  method: "post",
  url:this.$$baseURL + "sys/getPerson",
 }).then(res => {
  Vue.set(this.person,0,{age:res.data.age,name:res.data.name,sex:res.data.sex})
/**
* 0 更新的是位置0上的数据
*
*/
});
}
}

这样从服务端返回的新数据就实时更新到组件上了。

下面说一下第二种情况:

这种情况就是数据量较大,字段较多的,使用Vue.set()方法就有点过分了,这时我们应该怎么做呢?

核心思想就是定义一个临时变量,因computed 是计算属性,这里面的值更细可以实时渲染组件更新页面。

一:我们在data中定义一个很大的临时对象

data() {
 return {
 myTempObj:{} // 这时一个很大的临时对象,字段特别多
 }
}

二:我们在计算属性中也定义一个很大的对象

这个对象是我们在页面中真正用到的对象

computed: {
 myObj: {
  get: function(){
  return this.myTempObj; // 在这里把临时对象的值通过计算属性赋值给页面中用到的对象
  }
 },
}

三:发起异步请求,从服务端返回数据

methods: {
 getBigObj(){
  this.$http({
  method: "post",
  url:this.$$baseURL + "sys/getBigObj",
 }).then(res => {
  this.myTempObj=res.bigObj ; // 在这里用临时变量接受服务端返回值
});
}
}

四:页面模板组件中使用方法

<div class="brand-list bybrand_list" v-for="(item, index) in myObj" :key="index">
 {{item.name}}
</div>

以上两种情况都可以解决从服务端取到的数据不能实时更新问题,根据具体情况选择使用!希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery lazyload 的重复加载错误以及修复方法
Nov 19 Javascript
js日历功能对象
Jan 12 Javascript
JavaScript获取指定元素位置的方法
Apr 08 Javascript
JS判断是否长按某一键的方法
Mar 02 Javascript
JS如何设置iOS中微信浏览器的title
Nov 22 Javascript
微信小程序 免费SSL证书https、TLS版本问题的解决办法
Dec 14 Javascript
Vue 中mixin 的用法详解
Apr 23 Javascript
JavaScript模拟实现自由落体效果
Aug 28 Javascript
全面分析JavaScript 继承
May 30 Javascript
前端使用crypto.js进行加密的函数代码
Aug 16 Javascript
利用JavaScript模拟京东按键输入功能
Dec 01 Javascript
详解gantt甘特图可拖拽、编辑(vue、react都可用 highcharts)
Nov 27 Vue.js
浅谈vue生命周期共有几个阶段?分别是什么?
Aug 07 #Javascript
使用纯前端JavaScript实现Excel导入导出方法过程详解
Aug 07 #Javascript
浅谈vue中$event理解和框架中在包含默认值外传参
Aug 07 #Javascript
javascript前端和后台进行数据交互方法示例
Aug 07 #Javascript
javascript解析json格式的数据方法详解
Aug 07 #Javascript
Vue触发input选取文件点击事件操作
Aug 07 #Javascript
vue+element获取el-table某行的下标,根据下标操作数组对象方式
Aug 07 #Javascript
You might like
php的chr和ord函数实现字符加减乘除运算实现代码
2011/12/05 PHP
PHP的autoload机制的实现解析
2012/09/15 PHP
smarty中常用方法实例总结
2015/08/07 PHP
PHP工厂模式、单例模式与注册树模式实例详解
2019/06/03 PHP
JQuery 学习笔记 选择器之六
2009/07/23 Javascript
通过JQuery将DIV的滚动条滚动到指定的位置方便自动定位
2014/05/05 Javascript
微信小程序 WXDropDownMenu组件详解及实例代码
2016/10/24 Javascript
基于Layer+jQuery的自定义弹框
2020/05/26 Javascript
JS实现页面跳转参数不丢失的方法
2016/11/28 Javascript
详解网站中图片日常使用以及优化手法
2017/01/09 Javascript
vue组件实例解析
2017/01/10 Javascript
Vue2.0 实现歌手列表滚动及右侧快速入口功能
2018/08/08 Javascript
JS获取今天是本月第几周、本月共几周、本月有多少天、是今年的第几周、是今年的第几天的示例代码
2018/12/05 Javascript
图文详解vue框架安装步骤
2019/02/12 Javascript
JavaScript实现随机点名小程序
2020/10/29 Javascript
[01:02:06]LGD vs Mineski Supermajor 胜者组 BO3 第二场 6.5
2018/06/06 DOTA
Python去除列表中重复元素的方法
2015/03/20 Python
Python实现矩阵转置的方法分析
2017/11/24 Python
Pycharm设置去除显示的波浪线方法
2018/10/28 Python
详解Python连接MySQL数据库的多种方式
2019/04/16 Python
python turtle库画一个方格和圆实例
2019/06/27 Python
python爬虫 线程池创建并获取文件代码实例
2019/09/28 Python
在OpenCV里使用特征匹配和单映射变换的代码详解
2019/10/23 Python
Pandas替换及部分替换(replace)实现流程详解
2020/10/12 Python
Python 随机按键模拟2小时
2020/12/30 Python
CSS书写规范、顺序和命名规则
2014/03/06 HTML / CSS
HTML5 Canvas绘制五星红旗
2016/05/04 HTML / CSS
怎样写好自荐信和推荐信
2013/12/26 职场文书
银行存款证明样本
2014/01/17 职场文书
学校安全教育制度
2014/01/31 职场文书
会计毕业自我鉴定
2014/02/05 职场文书
社区优秀志愿者先进事迹
2014/05/09 职场文书
大学活动总结模板
2014/07/10 职场文书
大学生个人学习总结
2015/02/15 职场文书
2015年中秋节主持词
2015/07/30 职场文书
MySQL中utf8mb4排序规则示例
2021/08/02 MySQL