vue 组件中数组的更新
今天写项目时遇到的问题,瞬间就卡在那了
来还原一下:
parent.vue:
<template>
<div>
<button @click="change">change</button>
<input type="text" v-model="list" name="">
<child v-for="item in list" :key="item.id" :list="item.list"></child>
</div>
</template> <script>
import child from './child.vue'
export default {
name: 'parent',
data () {
return {
list:[{id:1,type:1},{id:2,type:2},{id:3,type:3}]
}
},methods:{
change(){
console.log(this)
console.log(this.$set)
setTimeout(()=>{
this.list[1]['list'] = {a:1,b:2,c:3}
},1000)
}
},
components:{
child
},
watch:{
// list:{
// handler: function (val, oldVal) { console.log(val,oldVal) },
// deep: true
// }
},computed:{
// test:function(){
// console.log(this.list)
// return this.list
// }
}
}
</script> <style scoped>
</style>
child.vue
<template>
<div class="border">
{{list.a}}<br />
{{list.b}}<br />
{{list.c}}
</div>
</template>
<script>
export default{
props:{
list:{
default:()=>{return{a:0,b:0,c:0}}
}
},
data(){
return{
// newList:this.list
}
},
computed:{
// newList:()=>{
// console.log(this.list)
// return this.list
// }
}
}
</script>
<style>
.border{
border:1px solid #ddd;
}
</style>
我预想中的正常情况应该是点击按钮,,然后 页面上的 000 000 000 变成 000 123 000 ,
但是就是没有变化看了下 vue 文档先试试是不是子组件检测的值出了问题,
然后我在子组件中添加了 watch和 computed 结果都是无效的;
后来我搜索了页面,发了了一个全局函数 :
Vue.set();
他的效果:
Vue.set( target, key, value )
参数:
{Object | Array} target{string | number} key{any} value
返回值:设置的值。
用法:
设置对象的属性。如果对象是响应式的,确保属性被创建后也是响应式的,同时触发视图更新。这个方法主要用于避开 Vue 不能检测属性被添加的限制。
终于被我找到了关键的地方了,但是在组件中怎么使用全局指令呢?
我后面又发现了 this.$set这个函数是完全一样的;
所以高兴的用上了:
正确用法:
methods:{
change(){
setTimeout(()=>{
this.list[1]['list'] = {a:1,b:2,c:3}//这样写 data 并不会检测
this.$set(this.list[1],'list',{a:1,b:2,c:3})//正确的写法
},1000)
}
这个坑,浪费了我几个小时,虽然我用 v-if 也解决了,但是总是不甘心,晚上继续研究终于让我解决了;
引以为戒;
vue 组件中数组的更新的更多相关文章
- Vue组件中引入jQuery
一.安装jQuery依赖 在使用jQuery之前,我们首先要通过以下命令来安装jQuery依赖: npm install jquery --save # 如果你更换了淘宝镜像,可以使用cnpm来安装, ...
- vue组件中的样式属性:scoped,解决在父组件中无法修改子组件样式问题
Scoped CSS规范是Web组件产生不污染其他组件,也不被其他组件污染的CSS规范. vue组件中的style标签标有scoped属性时表明style里的css样式只适用于当前组件元素,它是通过使 ...
- vue组件中的样式属性--scoped
Scoped CSS Scoped CSS规范是Web组件产生不污染其他组件,也不被其他组件污染的CSS规范. vue组件中的style标签标有scoped属性时表明style里的css样式只适用于当 ...
- vue组件中使用iframe元素
需要在本页面中展示vue组件中的超链接,地址栏不改变的方法: <template> <div class="accept-container"> <d ...
- 15.Vue组件中的data
1.组件中展示数据和响应事件: // 1. 组件可以有自己的 data 数据 // 2. 组件的 data 和 实例的 data 有点不一样,实例中的 data 可以为一个对象 // 3. 但是组件中 ...
- Vue 组件中 data 为什么必须是函数
原文地址 vue组件中的data必须是函数 类比引用数据类型 Object是引用数据类型,如果不用function 返回,每个组件的data 都是内存的同一个地址,一个数据改变了其他也改变了; jav ...
- vue组件中的data为什么是函数?
一.vue组件中的data为什么是函数 为了保证组件的独立性 和 可 复用性,data 是一个函数,组件实例化的时候这个函数将会被调用,返回一个对象,计算机会给这个对象分配一个内存地址,你实例化几次, ...
- 第七十三篇:解决Vue组件中的样式冲突
好家伙, 1.组件之间的样式冲突 默认情况下,写在.vue组件中的样式会全局生效,因此很容易造成多个组件之间的样式冲突问题. 举个例子: 我们在Left.vue的组件中添加样式 <templat ...
- vue 组件中this指向
今天开始学习慕课网的“去哪网”app开发,之前用学了一段时间对vue还是没有深刻理解透,先在开始要从新开始学习vue,今天学的第一堂课是vue 中v-model.v-for的简单例子,以前改变dom中 ...
随机推荐
- SAP GB01替代 程序:RGUGBR00
TCODE: SM30 VIEW : VWTYGB01 GB01 更新后需要执行 RGUGBR00
- Android性能优化之启动速度优化
Android性能优化之启动速度优化 Android app 启动速度优化,首先谈谈为什么会走到优化这一步,如果一开始创建 app 项目的时候就把这个启动速度考虑进去,那么肯定就不需要重新再来优化 ...
- vue 从入门到精通(二)
上一篇总结了一些vue的理论知识,如果你没看懂的话--那返回去继续去看啊!反正我要开始第二篇了. vue提供了大量的指令,比如:v-if,v-bind,v-on--太多,多写项目,多看API,这里就不 ...
- mybatis返回int类型报null
解决这个问题,是当查出来为NULL时,结一个默认值,如:0. MySQL: SELECT IFNULL(MAX(id),0)AS sort FROM table Oracle: SELECT nvl( ...
- LeetCode 561. Array Partition I (数组分隔之一)
Given an array of 2n integers, your task is to group these integers into n pairs of integer, say (a1 ...
- PHP基础入门详解(一)【世界上最好用的编程语言】
简介 --------- PHP(超文本预处器)是一种通用开源脚本语言.语法吸收了C语言.Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域.PHP 独特的语法混合了C.Ja ...
- spacemacs 初始安装报错
尝试使用emcas的配置文件spacemacs,第一次安装启动时,界面为纯白色,而且在输入完几个配置选项后,报了一个错误 Symbol's value as variable is void 根据官网 ...
- JDBC(三)数据库连接池(DBCP、C3P0)
前言 这段时间状态有一点浮躁,希望自己静下心来.还有特别多的东西还没有学懂.需要学习的东西非常的多,加油! 一.JDBC复习 Java Data Base Connectivity,java数据库连接 ...
- Linux学习(四)单用户模式、救援模式、虚拟机克隆、linux互连(包括密匙登录)
一.单用户模式 忘记root密码后,找回密码有两种方法: 单用户(grub没有加密的情况下可以使用) 救援模式 这一节我们先讲单用户模式 1.先重启(3种方法) reboot init 6 sho ...
- What Are You Talking About
What Are You Talking About Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 102400/204800 K (Ja ...