冇事来学系--Vue2.0条件渲染和列表渲染指令

简介: 条件渲染指令用来按需控制DOM的显示与隐藏

条件渲染


条件渲染指令用来按需控制DOM的显示与隐藏

  • v-if
  • v-show
<div id="app">
  <p v-if="flag">这是v-if控制的元素</p>
  <p v-show="flag">这是v-show控制的元素</p>
  <!-- flag为true时元素显示,为false则隐藏 -->
</div>
<script src=""></script>
const vm = new Vue({
  el: '#app',
  data: {
    flag = true
  },
  methods: {
  }         
})


v-if和v-show的区别


  • 通过观察元素的隐藏和显示,两者的区别在于:v-if是动态的删除和创建元素来控制元素的显示隐藏;而 ****来控制元素的显示与隐藏


性能比较:

  • 当需要频繁地切换元素的显示状态时,使用v-show性能更好
  • 当刚打开页面时,某些元素默认是不需要被展示的,且这个元素后期也可能不需要被展示,此时用v-if性能更好(flag初始值为false,使用v-if页面不会创建不需要展示的元素)

实际开发中直接使用v-if多一些(不考虑性能问题)

v-if配套指令v-else-if

<div v-if="type === 'A'">优</div>
<div v-else-if="type === 'B'">良</div>
<div v-else-if="type === 'C'">中</div>
<div v-else>差</div>


注意:

  1. v-else-if指令必须配合v-if指令使用,否则不会被识别  
  2. 当其中一个分支为true,则执行这个分支的内部代码,并且其余的分支判断都会跳过不执行
  3. 当所有的条件都不满足时,就显示v-else指令的元素
  4. 在使用v-else-if指令的时候是连续的,中间不能被打断

列表渲染指令v-for


v-for列表渲染指令,用于辅助开发者 基于一个数组来循环渲染一个列表结构 。v-for指令需要使用item in items形式的特殊语法,其中:

  • item是被循环的每一项(变量名,可任意命名)
  • items是待循环的 数组

要循环生成什么样的DOM结构,就在这个DOM结构上添加v-for指令。语法:v-for="item in items"

v-for指令还有一个可选的第二个参数,即当前项的索引。语法格式为:v-for="(item, index) in items" (item项和index项都是形参,可根据需要重命名)

<div id="app">
  <table class="table table-bordered table-hover table-striped">    
    <thead>
      <th>索引</th>
      <th>ID</th>
      <th>姓名</th>
    </thead>
    <tbody>
      <!-- 要循环生成什么样的DOM结构/组件,就在这个DOM结构/组件标签上添加v-for指令 -->
      <!--循环生成表格的每一行-->
      <tr v-for="(item, index) in list" :key="item.id" :title="item.name + index">     <!-- 动态绑定一个title属性,是为了证明在父元素中能使用item -->
        <td>{{ index }}</td>                <!-- 子元素能访问到父元素中的item和index -->
        <td>{{ item.id }}</td>
        <td>{{ item.name }}</td>
      <!-- 内容渲染时使用的数据来源:1、data 2、计算属性computed 3、当前元素及其父元素中的形参 -->
      </tr>
    </tbody>
  </table>
</div>
const vm = new Vue({
   el: '#app',
   data: {
     list: [
       {id: 1, name: '张三'},
       {id: 2, name: '李四'},
       {id: 3, name: '王五'}
     ]
   },
   methods: {
   }         
})



v-for基于对象来循环渲染一个列表结构

<template>
  <div>
    <h3>汽车信息</h3>
    <ul>
      <li v-for="(value, key) in car" :key="key">
        {{key}}---{{value}}
      </li>
    </ul>
  </div>
</template>
<script>
  export default {
    const vm = new Vue({
      el: '#root',
      data: {
        car: {
          name: '奥迪A8',
          price: '70万',
          color: '黑色'
        }
      }
    })
  }
</script>

页面渲染结果 :

网络异常,图片无法展示
|


官方建议,在使用v-for指令时,一定要动态绑定一个key属性,且尽量将id作为key的值(注意:key的值不能有重复,否则报错)。此外,官方对于key的值类型的要求只能是 字符串 或者 数字类型

key的作用:给节点做一个标识,相当于身份证的作用

难点:为啥不能使用索引值index作为key?

因为索引值和对应的项之间没有强制绑定关系(即当往数组里第一位插入元素(unshift( )方法)时,对应项的索引值就会改变)具体原理如下:

网络异常,图片无法展示
|

网络异常,图片无法展示
|

新旧虚拟DOM对比,若某一个元素的内容及属性完全一致,则不用通过新的虚拟DOM转化为真实DOM,而是直接复用旧虚拟DOM转化过的真是DOM


网络异常,图片无法展示
|

目录
相关文章
|
13天前
|
JavaScript
vue异步渲染
vue异步渲染
|
5天前
|
JavaScript 前端开发
Vue学习笔记8:解决Vue学习笔记7中用v-for指令渲染列表遇到两个问题
Vue学习笔记8:解决Vue学习笔记7中用v-for指令渲染列表遇到两个问题
|
5天前
|
JavaScript 前端开发 API
Vue学习笔记7:使用v-for指令渲染列表
Vue学习笔记7:使用v-for指令渲染列表
|
8天前
|
人工智能 JavaScript 索引
Duplicate keys detected: This may cause an update error.【Vue遍历渲染报错的解决】
这篇文章讨论了在Vue中进行列表渲染时遇到的“Duplicate keys detected”错误。这个错误通常发生在使用 `v-for` 指令渲染列表时,如果没有为每个循环项指定一个唯一的 `key` 属性,或者指定的 `key` 属性值重复了。文章提供了导致错误的原始代码示例,并给出了修正后的代码,通过在 `key` 绑定中加入索引确保 `key` 的唯一性。此外,文章还解释了为什么需要唯一 `key` 以及如何解决这个问题。
Duplicate keys detected: This may cause an update error.【Vue遍历渲染报错的解决】
|
2月前
|
JavaScript
Vue3描述列表(Descriptions)
该组件库包含 `Descriptions` 和 `DescriptionsItem` 两种组件,需配合使用。`Descriptions` 用于构建描述列表,提供标题、操作区、边框、垂直布局等配置;`DescriptionsItem` 作为列表项,可自定义标签和内容样式。支持响应式布局,并集成了多个实用工具函数,如节流、事件监听等。可通过属性灵活调整列表样式与布局。
Vue3描述列表(Descriptions)
|
8天前
|
JavaScript 前端开发 UED
组件库实战 | 用vue3+ts实现全局Header和列表数据渲染ColumnList
该文章详细介绍了如何使用Vue3结合TypeScript来开发全局Header组件和列表数据渲染组件ColumnList,并提供了从设计到实现的完整步骤指导。
|
2月前
|
JavaScript 前端开发 安全
svg图片hover变色,居然只用一个vue指令就可以搞定!千万别在写两个控制显影了!
【8月更文挑战第22天】svg图片hover变色,居然只用一个vue指令就可以搞定!千万别在写两个控制显影了!
171 3
|
2月前
|
JavaScript 算法 前端开发
"揭秘Vue.js的高效渲染秘诀:深度解析Diff算法如何让前端开发快人一步"
【8月更文挑战第20天】Vue.js是一款备受欢迎的前端框架,以其声明式的响应式数据绑定和组件化开发著称。在Vue中,Diff算法是核心之一,它高效计算虚拟DOM更新时所需的最小实际DOM变更,确保界面快速准确更新。算法通过比较新旧虚拟DOM树的同层级节点,递归检查子节点,并利用`key`属性优化列表更新。虽然存在局限性,如难以处理跨层级节点移动,但Diff算法仍是Vue高效更新机制的关键,帮助开发者构建高性能Web应用。
53 1
|
2月前
|
JavaScript 前端开发 安全
Vue学习之--------内置指令的使用【v-bind、v-model、v-for、v-on、v-if 、v-else、v-show、v-text。。。】(2022/7/19)
这篇文章详细介绍了Vue中常见的内置指令,如v-bind、v-model、v-for、v-on、v-if、v-else、v-show、v-text和v-html等,并通过代码示例演示了它们的使用和效果。
Vue学习之--------内置指令的使用【v-bind、v-model、v-for、v-on、v-if 、v-else、v-show、v-text。。。】(2022/7/19)
|
2月前
|
JavaScript API
Vue学习之--------列表排序(ffilter、sort、indexOf方法的使用)、Vue检测数据变化的原理(2022/7/15)
这篇博客文章讲解了Vue中列表排序的方法,使用`filter`、`sort`和`indexOf`等数组方法进行数据的过滤和排序,并探讨了Vue检测数据变化的原理,包括Vue如何通过setter和数组方法来实现数据的响应式更新。
Vue学习之--------列表排序(ffilter、sort、indexOf方法的使用)、Vue检测数据变化的原理(2022/7/15)
下一篇
无影云桌面