列表渲染 & 数据更新检测

v-for指令

v-for=“item in items”可将in换成of

  • 数组中为item,index
  • 对象中为value,key,index
  • 理想的 key 值是每项都有的唯一 id。必须在使用 v-for 时提供 key。key是Vue 识别节点的一个通用机制,key 并不与 v-for 特别关联
    -不推荐同时使用v-if和v-for
 <li v-for="item in items">
 <li v-for="(item, index) of items">
一、数组更新检测
  • 数组更新可以被检测渲染的情况:
    7个变异方法:push、pop、shift、unshift、splice、sort、reverse,会触发视图更新;
    替换数组:替换整个数组,如filter(),concat(),用一个含有相同元素数组去替换原来的数组非常高效
    Vue.set(vm.items, index, newValue)
    vm.$set(vm.items, index, newValue) (全局方法)

  • 不能被检测渲染情况:
    1、利用索引设置一个项;
    2、修改数组的长度 (可替换为vm.items.splice(newLength))

	//对于app.arr[3] = 10;的解决,除了上述方法,还可以替换整个数组
	//对所有数组的更新,最保险的保守方法就是替换整个数组,对象
	//数组复制方法:
	var arr = app.arr.slice(0);
	arr[3] = 10;
	app.arr = arr;//替换整个数组

##### 二、对象更改检测 - **不能检测渲染情况**:对象属性的添加或删除

解决
1、Vue.set(object, key, value);
2、替换整个对象
需要为已有对象赋予多个新属性,比如使用 Object.assign() 或 _.extend(),可如下操作

	vm.userProfile = Object.assign({}, vm.userProfile, {
	  age: 27,
	  favoriteColor: 'Vue Green'
	})
三、绑定的数据中,新增其他数据会造成不能被检测

解决:在data属性中,预定义出来这部分数据

猜你喜欢

转载自blog.csdn.net/weixin_43955911/article/details/88875435