Vue基础教程--循环分支指令(二)

1 v-for循环四种方式

1.1 v-for循环普通数组

<div id="app">
    <p>{
   
   {list[0]}}</p>
    <p>{
   
   {list[1]}}</p>
    <p>{
   
   {list[2]}}</p>
    <p>{
   
   {list[3]}}</p>
   <!--索引可选可不选-->
   <!-- <p v-for="item in list">{
    
    {item}}</p> -->

    <p v-for="(item, i) in list">索引值:{
   
   {i}} --- 每一项:{
   
   {item}}</p>

</div>

<script>
    // 创建 Vue 实例,得到 ViewModel
    var vm = new Vue({
     
     
        el: '#app',
        data: {
     
     
            list: [1, 2, 3, 4]
        },
        methods: {
     
     }
    });
</script>

效果展示
在这里插入图片描述

1.2 v-for循环对象数组

<style>
    table#a{
     
     
        border-collapse:collapse;
    }
    #a td
    {
     
     border:1px solid black;}
    #a th
    {
     
     border:1px solid black;}
</style>
<body>
<div id="app">
    <table id="a" >
        <tr>
            <th>索引</th>
            <th>名称</th>
            <th>位置</th>
        </tr>
        <tr v-for="(hero, i) in list">
            <td>{
   
   {i}}</td>
            <td>{
   
   {hero.name}}</td>
            <td>{
   
   {hero.type}}</td>
        </tr>
    </table>
</div>

<script>
    // 创建 Vue 实例,得到 ViewModel
    var vm = new Vue({
     
     
        el: '#app',
        data: {
     
     
            list: [
                {
     
     name: '小炮', type: 'AD'},
                {
     
     name: '万豪', type: '打野'},
                {
     
     name: '机器人', type: '辅助'},
                {
     
     name: '火男', type: 'AP'},
                {
     
     name: '盖伦', type: '上单'}
            ]
        },
        methods: {
     
     }
    });
</script>
</body>

效果展示
在这里插入图片描述

1.3 v-for循环对象

<div id="app">
    <!-- 注意:在遍历对象身上的键值对的时候, 除了 有  val  key  ,在第三个位置还有 一个 索引  -->
    <p v-for="(val, key, i) in hero">{
   
   {i}} {
   
   {key}} : {
   
   {val}}</p>
</div>

<script>
    // 创建 Vue 实例,得到 ViewModel
    var vm = new Vue({
     
     
        el: '#app',
        data: {
     
     
            hero: {
     
     
                name: '复仇焰魂',
                gender: '男',
                address: '符文之地'
            }
        }
    })

</script>

效果展示
在这里插入图片描述

1.4 v-for迭代数字

  <div id="app">
    <!-- in 后面我们放过  普通数组,对象数组,对象, 还可以放数字 -->
    <!-- 注意:如果使用 v-for 迭代数字的话,前面的 count 值从 1 开始 -->
    <p v-for="count in 4">这是第 {
   
   { count }} 次循环</p>
  </div>

  <script>
    // 创建 Vue 实例,得到 ViewModel
    var vm = new Vue({
     
     
      el: '#app',
      data: {
     
     },
      methods: {
     
     }
    });
  </script>

效果展示
在这里插入图片描述

1.5 v-for循环中key属性的使用

  • v-for 循环的时候,key 属性只能使用 number获取string
  • key 在使用的时候,必须使用 v-bind 属性绑定的形式,指定 key 的值
  • 在组件中,使用v-for循环的时候,或者在一些特殊情况中,如果 v-for 有问题,必须 在使用 v-for 的同时,指定唯一的字符串/数字类型 :key 值
<div id="app">

    <div>
        <label>Id:
            <input type="text" v-model="id">
        </label>

        <label>Name:
            <input type="text" v-model="name">
        </label>

        <input type="button" value="添加" @click="add">
    </div>
    <p v-for="item in list" :key="item.id">
        <input type="checkbox">{
   
   {item.id}} --- {
   
   {item.name}}
    </p>
</div>

<script>
    // 创建 Vue 实例,得到 ViewModel
    var vm = new Vue({
     
     
        el: '#app',
        data: {
     
     
            id: '',
            name: '',
            list: [
                {
     
     id: 1, name: '李斯'},
                {
     
     id: 2, name: '嬴政'},
                {
     
     id: 3, name: '赵高'}
            ]
        },
        methods: {
     
     
            add() {
     
      // 添加方法
                this.list.unshift({
     
     id: this.id, name: this.name})
            }
        }
    });
</script>

效果展示
不存在:key="item.id"
存在:key="item.id"
第一幅图循环是通过

,第二幅图循环是通过

从效果展示可以看出都是勾选嬴政的情况下,存在 :key="item.id"时,添加新的对象成功后勾选不会错位,仍然勾选的是嬴政,而不存在 :key="item.id"时,添加新的对象成功后勾选出现了问题,勾选了李斯,这就是v-for循环中key属性的作用。

2 v-if和v-show的使用

  • v-if 的特点:每次都会重新删除或创建元素
  • v-show 的特点: 每次不会重新进行DOM的删除和创建操作,只是切换了元素的 display:none 样式
  • v-if 有较高的切换性能消耗
  • v-show 有较高的初始渲染消耗
  • 如果元素涉及到频繁的切换,最好不要使用 v-if, 而是推荐使用 v-show
  • 如果元素可能永远也不会被显示出来被用户看到,则推荐使用 v-if
  <div id="app" align="right">

    <input type="button" :value="flag ? '隐藏': '显示'" @click="flag=!flag">
    <h3 v-if="flag">这是用v-if控制的元素</h3>
    <h3 v-show="flag">这是用v-show控制的元素</h3>

  </div>

  <script>
    // 创建 Vue 实例,得到 ViewModel
    var vm = new Vue({
     
     
      el: '#app',
      data: {
     
     
        flag: true
      }
    });
  </script>

效果展示
在这里插入图片描述

从效果展示可以看出v-if和v-show都实现了元素的隐藏和显示,但是从源代码可以看出v-if是通过删除或创建元素实现的,v-show是通过style="display: none;"实现的。
上一章:Vue基础教程–基本指令(一)
下一章:Vue基础教程–过滤器(三)

猜你喜欢

转载自blog.csdn.net/u011581852/article/details/114950462
今日推荐