vue入门——条件和列表渲染

vue入门——条件渲染、列表渲染

    • 条件渲染
    • 列表渲染
      • 数组检测更新
      • 对象检测注意事项
      • 其他

条件渲染

  v-if 指令,很容器理解就是一个条件判断,当条件成立时渲染;另外,还能够使用 v-else-ifv-elsev-else 元素必须紧跟在带 v-if 或者 v-else-if 的元素的后面,否则它将不会被识别。

A

B

C

  根据上边的例子,v-if 主要就是决定元素的显示和隐藏;还有另外一个相同作用的指令 v-show ,他们的区别在于,v-show 解析之后,相当于在元素上添加了 display:none 的样式,而 v-if 则是该部分的元素不会渲染,也就是说,审查元素时看不到该部分的元素。

  如果需要频繁切换,使用 v-show 会更好,因为 v-if 每次条件成立时,会重新渲染。

列表渲染

  v-for 渲染数组数据,使用 item in items 的语法,遍历数组。

  另外,在循环中,我们还能够使用 (item, index) in items ,index 是数组中的索引;除了遍历数组外,还能够遍历对象 (value, key) in items

测试: v-for 遍历数组

  • {{index}}--{{p.name}}--{{p.age}} -- --

测试: v-for 遍历对象

  • {{ key }} : {{ value }}

  Vue 官方文档建议,在使用 v-for 时,为每个元素指定一个唯一的 key 值。通常,我们使用数组的 index 作为 key 值,但是,其实并不推荐这么做。

使用 v-for 更新已渲染的元素列表时,默认用就地复用策略;列表数据修改的时候,他会根据 key 值去判断某个值是否修改,如果修改,则重新渲染这一项,否则复用之前的元素;

数组检测更新

  Vue 的双向绑定,是监测到数据变化之后,做出对应的响应事件;Vue 包含一组观察数组的变异方法(改变原始数组的方法),主要如下:

  • push(): 数组中添加元素到最后
  • pop() : 移除最后一个元素
  • shift(): 移除第一个元素
  • unshift(): 添加元素到数组开头
  • splice(): 移除指定位置的元素, splice(index, 1)
  • sort(): 排序
  • reverse(): 翻转

  除了改变原始数组,有些方法,会返回一个新数组,例如:filter(),concat() (拼接数组),slice() (提取字符串),vue 也能够监听到数组的变化。

注意 Vue 无法检测到一下数组的变化:

  1. 使用索引设置数组的值 vm.items[indexOfItem] = newValue
  2. 修改数组长度 vm.items.length = newLength

解决办法:

  • 问题一:
    • Vue.set(vm.items, indexOfItem, newValue)
    • vm.items.splice(indexOfItem, 1, newValue)
    • 使用 vm.$set 实例方法(全局方法 Vue.set 的别名) vm.$set(vm.items, indexOfItem, newValue)
  • 问题二:
    • vm.items.splice(newLength)

对象检测注意事项

  除了数组的变化,有些检测不到之外,Vue 不能检测对象属性的添加或删除

var vm = new Vue({
  data: {
    a: 1
  }
})
// `vm.a` 现在是响应式的

// `vm.b` 不是响应式的
vm.b = 2

解决办法:

var vm = new Vue({
  data: {
    userProfile: {
      name: 'Anika'
    }
  }
})

使用 Vue.set :

  • Vue.set(vm.userProfile, ‘age’, 17)
  • vm.$set(vm.userProfile, ‘age’, 17)

如果需要设置多个属性, 可以使用 Object.assign (对象的拷贝),但是应该将两个对象的属性创建一个新的对象

// 反例
Object.assign(vm.userProfile, {
  age: 27,
  favoriteColor: 'Vue Green'
})
// 正确做法
vm.userProfile = Object.assign({}, vm.userProfile, {
  age: 27,
  favoriteColor: 'Vue Green'
})

其他

  1. v-for 除了能够遍历 data,还可以是 method 中的一个方法;
  2. v-for 和 v-if 还能够作用在 template 上;
  3. v-for 和 v-if 同时使用时,v-for 优先级更高;但一般不推荐同时使用。

你可能感兴趣的:(vue,vue,vue入门)