侧边栏壁纸
  • 累计撰写 781 篇文章
  • 累计创建 1 个标签
  • 累计收到 1 条评论
标签搜索

v-for

Dettan
2021-04-10 / 0 评论 / 0 点赞 / 110 阅读 / 2,914 字
温馨提示:
本文最后更新于 2022-04-30,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。
/ 前端 / Vue / v-for
加上v-bind:key="item.id"来确保排序时不是只换属性而是调换元素
<span v-for="n in 10">{{ n }} </span>
按顺序不是按名字
<li v-for="(item, index) in items">
<li v-for="(value, name, index) in myObject">
v-for 和 component 结合
<my-component
  v-for="(item, index) in items"
  :item="item"
  :index="index"
  :key="item.id">
</my-component>
遍历数组
<ul id="example-1">
  <li v-for="item in items">
    {{ item.message }}
  </li>
</ul>

<ul id="example-2">
  <li v-for="(item, index) in items">
    {{ parentMessage }} - {{ index }} - {{ item.message }}
  </li>
</ul>
var testFor= new Vue({
  el: '#example-2',
  data: {
    parentMessage: 'Parent',
    items: [
      { message: 'Foo' },
      { message: 'Bar' }
    ]
  }
})
结果:
Parent - 0 - Foo
Parent - 1 - Bar
操作

Vue 只侦听数组的下面这些方法
push() testFor.items.push({id:6,content:'123'})
pop()
shift() 删除并返回数组的第一个元素
unshift() 向数组的开头添加一个或更多元素,并返回新的长度。
splice() 删除或者替换,会返回被替换或删除的元素
testFor.items.splice(0,1,) 删除第一个
testFor.items.splice(0,2,) 删除第二个
testFor.items.splice(0,1,‘321’) 替换第一个为‘321’
testFor.items.splice(2) 只留下前两个
sort()
reverse()
slice() 从某个已有的数组返回选定的元素,不侦听这个,听了也没用
替换数组
变异方法,顾名思义,会改变调用了这些方法的原始数组。相比之下,也有非变异 (non-mutating method) 方法,例如 filter()concat() 和 slice() 。它们不会改变原始数组,而总是返回一个新数组。当使用非变异方法时,可以用新数组替换旧数组:
example1.items = example1.items.filter(function (item) {
  return item.message.match(/Foo/)
})
不侦听

1.
当你利用索引直接设置一个数组项时,例如:vm.items[indexOfItem] = newValue testFor.items[0].content='11',当数组里是对象时就又侦听了。 可以用下面方法解决
// Vue.set
Vue.set(vm.items, indexOfItem, newValue)
// Array.prototype.splice
vm.items.splice(indexOfItem, 1, newValue)
2.
当你修改数组的长度时,例如:vm.items.length = newLength

遍历对象

<ul id="v-for-object" class="demo">
  <li v-for="value in object">
    {{ value }}
  </li>
</ul>
new Vue({
  el: '#v-for-object',
  data: {
    object: {
      title: 'How to do lists in Vue',
      author: 'Jane Doe',
      publishedAt: '2016-04-10'
    }
  }
})
结果:
How to do lists in Vue
Jane Doe
2016-04-10
你也可以提供第二个的参数为 property 名称 (也就是键名):
<div v-for="(value, name) in object">
  {{ name }}: {{ value }}
</div>
title: How to do lists in Vue
author: Jane Doe
publishedAt: 2016-04-10
还可以用第三个参数作为索引:
<div v-for="(value, name, index) in object">
  {{ index }}. {{ name }}: {{ value }}
</div>
0. title: How to do lists in Vue
1. author: Jane Doe
2. publishedAt: 2016-04-10

对象变更检测注意事项
还是由于 JavaScript 的限制,Vue 不能检测对象属性的添加或删除
var vm = new Vue({
  data: {
    a: 1
  }
})
// `vm.a` 现在是响应式的

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



对于已经创建的实例,Vue 不允许动态添加根级别的响应式属性。但是,可以使用 Vue.set(object, propertyName, value) 方法向嵌套对象添加响应式属性。
你还可以使用 vm.$set 实例方法,它只是全局 Vue.set 的别名:
vm.$set(vm.userProfile, 'age', 27)
有时你可能需要为已有对象赋值多个新属性,比如使用 Object.assign() 或 _.extend()。在这种情况下,你应该用两个对象的属性创建一个新的对象。所以,如果你想添加新的响应式属性,不要像这样:
Object.assign(vm.userProfile, {
  age: 27,
  favoriteColor: 'Vue Green'
})
你应该这样做:
vm.userProfile = Object.assign({}, vm.userProfile, {
  age: 27,
  favoriteColor: 'Vue Green'
})


在 v-for 里使用值范围
v-for 也可以接受整数。在这种情况下,它会把模板重复对应次数。
<div>
  <span v-for="n in 10">{{ n }} </span>
</div>
结果:
1 2 3 4 5 6 7 8 9 10

0

评论区