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属性中,预定义出来这部分数据