vue 数组和对象渲染问题

数组更新检测

  1. 在 vue 中使用数组的push()pop()shift()unshift()splice()sort()reverse() 、filter()concat() 方法时,改变数组的同时可以触发视图的变化。
  2. 注意: 有两种情况 vue 无法检测到变动的数组,分别是:

(1)直接操作数组的长度;

(2)利用索引直接设置一个项时,例如:this.arr[indexOfItem] = newValue

代替方案如下

// Vue.set
this.$set(arr, indexOfItem, newValue)
// Array.prototype.splice
this.arr.splice(indexOfItem, 1, newValue)

对象更新检测

    export default {
        data() {
            return {
                index: 0,
                object: {
                    name: ‘haha‘
                }
            }
        },
        methods: {
            changeArr() {
                //   方法一:
                 this.$set(this.object, ‘age‘, 27)
                //   方法二:
                  this.object = Object.assign({}, this.object, {
                    age: 27
                 })
                //  方法三: ---不可行
                 this.object.age = ‘27‘
            }
        }
    }

this.$forceUpdate()迫使 Vue 实例重新渲染。注意它仅仅影响实例本身和插入插槽内容的子组件,而不是所有子组件。
使用 v-if 在切换时,元素及它的绑定数据和组件都会被销毁并重建

原文地址:https://www.cnblogs.com/zwhbk/p/12419562.html

时间: 2024-08-30 02:36:25

vue 数组和对象渲染问题的相关文章

关于vue数组中对象属性变更页面没重新渲染的问题

前段时间做开发的时候用mqtt监听了服务端信息,推送过来的数据要变更数组里面的对象的数据,修改好后但是页面并没有更新,因为javascript机制,vue并不能检测到数组变化,也是查阅知道了$set()函数, 具体用法: arr.$set(index, { name : value }), index: 索引,name: 数组中对象的属性名, value: 要赋给属性的值 this.footerList.$set(i, { siteId : monitorSiteData[j].siteId,

vue数组中对象属性变化页面不渲染问题

做checkbox多选功能的时候遇到了一个坑,逻辑怎么看都对,但是就是有bug,最后发现数组那里值变了页面勾选没有重新渲染. 换了关键词搜索找到了相关方法. 其实之前读文档教程的时候看到过这里,但是只有真的使用之后才会有最直接的感触. ------------------------------------------- 数组更新检测 变异方法 Vue 包含一组观察数组的变异方法,所以它们也将会触发视图更新.这些方法如下: push() pop() shift() unshift() splic

vue数组和对象方法

变异方法:会改变原始数组 push() pop() shift() unshift() splice() sort() reverse() 非变异方法:不会改变原始数组,但是会返回一个新数组 fliter() slice() concat() vue不能检测变动的数组 利用索引值直接设置内容时 vm.items[indexOfItem] = newValue: 修改数组的长度时 vm.items.length = newLength: //这种写法并不能实时检测到变化 var vm = new

vue数组和对象列表操作

1不可以直接通过下标添加数组     list[4]={……} 2通过数组的变异方法添加数组   push pop unshift shift splice sort reverse 3通过改变引用,改变地址空间,添加数组数据. *template占位符(可以包裹一些元素,但是并不会进行页面渲染) 多个相邻元素需要循环时,可以使用template包裹,外层不会出现多余父元素. 对象循环: v-for="(item,key,index) of userInfo" 数据可以进行直接修改,但

vue 关于数组和对象的更新

在日常开发中,我们用的最多的就是 绑定数据 <div v-for="item in data" :key="item.id"> <!-- 内容 --></div> 如果你有ng的开发经验,假设 data 你要更新数据了 this.data=res.data; 但是这在vue中 并不会起到作用,DOM并没有触发变化. vue不是已经实现的实时数据双向绑定,那么model层发生了变化之后,为什么view层没有更新呢??? 看官网 这里

vue数组对象修改触发视图更新

直接修改数组元素是无法触发视图更新的,如 this.array[0] = { name: 'meng', age: 22 } 修改array的length也无法触发视图更新,如 this.array.length = 2; 触发视图更新的方法有如下几种 1. Vue.set 可以设置对象或数组的值,通过key或数组索引,可以触发视图更新 数组修改 Vue.set(array, indexOfItem, newValue) this.array.$set(indexOfItem, newValue

vue 数组对象取对象的属性: Cannot read property &#39;xxxx&#39; of undefined

{{ list[0].name }} list[0]没有定义 能正确打印出想要的结果,但就是报错,外面套个v-for就没错了 很费解 与异步有关,解决办法: <template v-if=list[0]> {{ list[0].name }} </template> https://www.v2ex.com/amp/t/402145 vue 数组对象取对象的属性: Cannot read property 'xxxx' of undefined 原文地址:https://www.c

vue遍历数组和对象的方法以及他们之间的区别

前言:vue不能直接通过下标的形式来添加数据,vue也不能直接向对象中加值,因为那样即使能加入值页面也不会跟着改变 一,vue遍历数组 1,使用vue数组变异方法 pops 删除数组租后一项 push 往数组里面增加一项 shift 删除数组第一项 unshift 往数组第一项里面加一线内容 splice 数组截取 sort 数组排序 reverse 对数组取反 2,数组的引用 3,vue set方法 二,vue遍历对象 1,对象引用 2,set方法 由于时间问题下回仔细说明,谢谢 原文地址:h

理解Vue中的Render渲染函数

VUE一般使用template来创建HTML,然后在有的时候,我们需要使用javascript来创建html,这时候我们需要使用render函数.比如如下我想要实现如下html: <div id="container"> <h1> <a href="#"> Hello world! </a> </h1> </div> 我们会如下使用: <!DOCTYPE html> <html