Vue:V-for

v-for用来遍历
遍历数组对象
<!DOCTYPE html>
<html lang="en" xmlns:>
<head>
  <meta charset="UTF-8">
  <!-- 开发环境版本,包含了有帮助的命令行警告 -->
  <script src="js/vue.js"></script>
  <title>Title</title>

</head>
<body>
<div id="firstVue">
   <h1>列表渲染</h1>
  <ul>
    <!--p获得的是person里面的对象:对象点属性即可-->
    <li v-for="(p,index) in person">
      {{p.name}}-{{p.age}}-{{index}}
    </li>
  </ul>

</div>
</body>
<script type="text/javascript">
  //关闭生成提示
  Vue.config.productionTip=false;

  let v=new Vue({
    el:"#firstVue",
    data:{
      person:[
        {id:1,name:"张岱",age:18},
        {id:2,name:"张子",age:18},
        {id:3,name:"张而",age:18}
      ]
    }
  })
  console.log(v)
</script >
</html>

遍历时候使用v-for=“(p,index) in person”p是形参、person是data的对象数组,index:数组下标。

遍历单个对象
<!DOCTYPE html>
<html lang="en" xmlns:>
<head>
  <meta charset="UTF-8">
  <!-- 开发环境版本,包含了有帮助的命令行警告 -->
  <script src="js/vue.js"></script>
  <title>Title</title>

</head>
<body>
<div id="firstVue">
   <h1>列表渲染</h1>
  <ul>
    <!--遍历的是对象的时候设置连个参数 key value-->
    <li v-for="(key,value) in person">
      {{key}}-{{value}}
    </li>
  </ul>

</div>
</body>
<script type="text/javascript">
  //关闭生成提示
  Vue.config.productionTip=false;

  let v=new Vue({
    el:"#firstVue",
    data:{
      person:
        {id:1,name:"张岱",age:18}
    }
  })
  console.log(v)
</script >
</html>

遍历单个对象使用两个参数接收(key - value)key:属性名 value:属性值
关于v-for的:key问题
为什么要加上key这个值(:key="index")?

答:key是遍历时候dom对象的一个标识(需要不同值),涉及效率问题修改遍历数据时候Vue会把已经存在的dom元素拿来继续使用,key是标识dom元素的id,否则出现渲染错误。

使用index作为key(因为被改变所以出错)
<!DOCTYPE html>
<html lang="en" xmlns:>
<head>
  <meta charset="UTF-8">
  <!-- 开发环境版本,包含了有帮助的命令行警告 -->
  <script src="js/vue.js"></script>
  <title>Title</title>

</head>
<body>
<div id="firstVue">
   <h1>列表渲染</h1>
  <button @click="add">往头部添加一个老刘</button>
  <ul>
    <!--p获得的是person里面的对象:对象点属性即可-->
    <li v-for="(p,index) in person" :key="index">
      {{p.name}}-{{p.age}}-{{index}}
      <input type="text">
    </li>
  </ul>

</div>
</body>
<script type="text/javascript">
  //关闭生成提示
  Vue.config.productionTip=false;

  let v=new Vue({
    el:"#firstVue",
    data:{
      person:[
        {id:1,name:"张岱",age:18},
        {id:2,name:"张子",age:18},
        {id:3,name:"张而",age:18}
      ]
    },methods:{
      add(){
        let p={id:4,name:"老刘",age:19}
        this.person.unshift(p);
      }
    }
  })
  console.log(v)
</script >
</html>

原来:

image

点击添加后(渲染错乱)

image

原因:插入时候key的index发生变换,而根据Vue重用原理会自动匹配原来的所以发生了渲染错误

建议:使用后插入或者使用:key=“p.id”

改进后
<!DOCTYPE html>
<html lang="en" xmlns:>
<head>
  <meta charset="UTF-8">
  <!-- 开发环境版本,包含了有帮助的命令行警告 -->
  <script src="js/vue.js"></script>
  <title>Title</title>

</head>
<body>
<div id="firstVue">
   <h1>列表渲染</h1>
  <button @click="add">往头部添加一个老刘</button>
  <ul>
    <!--p获得的是person里面的对象:对象点属性即可-->
    <li v-for="(p,index) in person" :key="p.id">
      {{p.name}}-{{p.age}}-{{index}}
      <input type="text">
    </li>
  </ul>

</div>
</body>
<script type="text/javascript">
  //关闭生成提示
  Vue.config.productionTip=false;

  let v=new Vue({
    el:"#firstVue",
    data:{
      person:[
        {id:1,name:"张岱",age:18},
        {id:2,name:"张子",age:18},
        {id:3,name:"张而",age:18}
      ]
    },methods:{
      add(){
        let p={id:4,name:"老刘",age:19}
        this.person.unshift(p);
      }
    }
  })
  console.log(v)
</script >
</html>

posted @ 2021-11-09 09:56  旅祸少年  阅读(68)  评论(0编辑  收藏  举报