vue 列表渲染

我们可以使用 v-for 指令基于一个数组来渲染一个列表。 v-for指令的值需要使用 item in items 形式的特殊语法。其中 items 是源数据的数组,而 item 是迭代项的别名。

template>
  <div>
    <p v-for="item in name">{{ item }}</p>
  </div>
</template>

<script>
export default{
  data(){
    return{
      name:["a","b","c"]
    }
  }
}
</script>

复杂数据 

大多数情况,我们渲染的数据源来源于网络请求,也就是 JsoN 格式

<template>
  <div v-for="item in result">
    <p >{{ item.title }}</p>
    <img v-bind:src="item.avator">
  </div>
</template>

<script>
export default{
  data(){
    return{
      result:[{
        "id": 111,
        "title": "图片1",
        "avator":"vue-damo1/src/img/OIP-C (1).jfif"
      },
      {
        "id": 112,
        "title": "图片2",
        "avator":"vue-damo1/src/img/OIP-C (2).jfif"
      },
      {
        "id": 113,
        "title": "图片3",
        "avator":"vue-damo1/src/img/OIP-C.jfif"
      }
    ]
    }
  }
}
</script>

 

v-for也支持使用可选的第二个参数表示当前项的位置索引 。

<template>
  <div v-for="(item,index) in result">{{ index }}
    <p >{{ item.title}}</p>
    <img v-bind:src="item.avator">
  </div>
</template>

<script>
export default{
  data(){
    return{
      result:[{
        "id": 111,
        "title": "图片1",
        "avator":"vue-damo1/src/img/OIP-C (1).jfif"
      },
      {
        "id": 112,
        "title": "图片2",
        "avator":"vue-damo1/src/img/OIP-C (2).jfif"
      },
      {
        "id": 113,
        "title": "图片3",
        "avator":"vue-damo1/src/img/OIP-C.jfif"
      }
    ]
    }
  }
}
</script>

注意:可以将in改为of 这样更加接近js的迭代语法。

v-for遍历对象 

 

<template>
  <div>
    <p v-for="(value,key,index) in result">{{ value }}-{{ key }}-{{ index }}</p>
    <!-- value代表对象属性的值 key表示对象属性名 index代表下标-->
  </div>
</template>

<script>
export default{
  data(){
    return{
      result:{
        name:"张三",
        age:"11",
        sex:"男"
      }
    }
  }
}
</script>

 

通过 key 来管理状态

ue 默认按照“就地更新”的策略来更新通过 v-for 渲染的元素列表。当数据项的顺序改变时,Vue 不会随之移动 DOM 元素的顺序,而是就地更新每个元素,确保它们在原本指定的索引位置上渲染。为了给 Vue 一个提示,以便它可以跟踪每个节点的标识,从而重用和重新排序现有的元素,你需要为每个元素对应的块提供一个唯一的 key attribute。

<template>
  <div>
    <p v-for="(value,key,index) in result" :key="index">{{ value }}-{{ key }}-{{ index }}</p>
    <!-- value代表对象属性的值 key表示对象属性名 index代表下标-->
  </div>
</template>

<script>
export default{
  data(){
    return{
      result:{
        name:"张三",
        age:"11",
        sex:"男"
      } 
    }
  }
}
</script>

注意:key 在这里是一个通过 v-bind 绑定的特殊 attribute推荐在任何可行的时候为 v-for 提供一个 key attributekey 绑定的值期望是一个基础类型的值,例如字符串或 number 类型。

key的来源 

尽量不要使用 index 作为 key 的值,我们要确保每一条数据的唯一索引不会发生变化。

<template>
  <div>
    <p v-for="(value,key,index) in result" :key="result.id">{{ value }}-{{ key }}-{{ index }}</p>
    <!-- value代表对象属性的值 key表示对象属性名 index代表下标-->
  </div>
</template>

<script>
export default{
  data(){
    return{
      result:{
         id:"111",
        name:"张三",
        age:"11",
        sex:"男"
      } 
    }
  }
}
</script>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值