Vue学习之v-if和v-for指令「建议收藏」

Vue学习之v-if和v-for指令「建议收藏」Vue学习之v-if和v-for指令

大家好,又见面了,我是你们的朋友全栈君。

v-if和v-show

v-if和v-show的作用有点类似,我们一起来看下,案例代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="./lib/vue-2.4.0.js"></script>
</head>
<body>
    <div id="app">
        <h2 v-if='flag'>v-if的使用</h2>
        <h2 v-show='flag'>v-show的使用</h2>

    </div>
    <script>
        var vm = new Vue({
            el:"#app",
            data:{
                flag:true
            },
            methods:{

            }
        })
    </script>
</body>
</html>

效果如下:

在这里插入图片描述

通过演示效果我们能看到v-if和v-show都能控制标签元素的现实和隐藏,但相互之间又有区别

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

v-for的使用

1.普通数组

针对数据为数组的类型,循环的使用。

简单插值的使用

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
  <script src="./lib/vue-2.4.0.js"></script>
</head>

<body>
  <div id="app">
    <p>{
  
  {list[0]}}</p>
    <p>{
  
  {list[1]}}</p>
    <p>{
  
  {list[2]}}</p>
    <p>{
  
  {list[3]}}</p>
    <p>{
  
  {list[4]}}</p>

  </div>

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

</html>

在这里插入图片描述

循环使用

简单的使用循环

在这里插入图片描述

在这里插入图片描述

获取循环下标

在这里插入图片描述

在这里插入图片描述

2.对象数组

集合中的元素是对象

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
  <script src="./lib/vue-2.4.0.js"></script>
</head>

<body>
  <div id="app">
    <p v-for="(user, i) in list">Id:{
  
  { user.id }} --- 名字:{
  
  { user.name }} --- 索引:{
  
  {i}}</p>
  </div>

  <script>
    // 创建 Vue 实例,得到 ViewModel
    var vm = new Vue({
      el: '#app',
      data: {
        list: [
          { id: 1, name: '张三' },
          { id: 2, name: '李四' },
          { id: 3, name: '王五' },
          { id: 4, name: '小明' }
        ]
      },
      methods: {}
    });
  </script>
</body>

</html>

在这里插入图片描述

数组中的元素是自定义的对象的时候直接通过”.”存取器来获取元素。

3.循环对象

注意:在遍历对象身上的键值对的时候, 除了有val,key ,在第三个位置还有 一个 索引 。

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
  <script src="./lib/vue-2.4.0.js"></script>
</head>

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

  <script>
    // 创建 Vue 实例,得到 ViewModel
    var vm = new Vue({
      el: '#app',
      data: {
        user: {
          id: 1,
          name: '波波烤鸭',
          gender: '男'
        }
      },
      methods: {}
    });
  </script>
</body>

</html>

在这里插入图片描述

4.迭代数字

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
  <script src="./lib/vue-2.4.0.js"></script>
</head>

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

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

</html>

在这里插入图片描述

5.循环中key属性的使用

注意:2.2.0+ 的版本里,当在组件中使用 v-for 时,key 现在是必须的。
当 Vue.js 用 v-for 正在更新已渲染过的元素列表时,它默认用 “就地复用” 策略。如果数据项的顺序被改变,Vue将不是移动 DOM 元素来匹配数据项的顺序, 而是简单复用此处每个元素,并且确保它在特定索引下显示已被渲染过的每个元素。为了给 Vue 一个提示,以便它能跟踪每个节点的身份,从而重用和重新排序现有元素,你需要为每项提供一个唯一 key 属性。

有问题的情况

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
  <script src="./lib/vue-2.4.0.js"></script>
</head>

<body>
  <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>

    <!-- 注意: v-for 循环的时候,key 属性只能使用 number获取string -->
    <!-- 注意: key 在使用的时候,必须使用 v-bind 属性绑定的形式,指定 key 的值 -->
    <!-- 在组件中,使用v-for循环的时候,或者在一些特殊情况中,如果 v-for 有问题,必须 在使用 v-for 的同时,指定 唯一的 字符串/数字 类型 :key 值 -->
    <p v-for="item in list" >
      <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: '张三1' },
          { id: 2, name: '张三2' },
          { id: 3, name: '张三3' },
          { id: 4, name: '张三4' },
          { id: 5, name: '张三5' }
        ]
      },
      methods: {
        add() { // 添加方法
          this.list.unshift({ id: this.id, name: this.name })
        }
      }
    });
  </script>
</body>

</html>

效果

在这里插入图片描述

我们发现原来我们勾选的是id为4的选项,但是当我们插入新的一行的时候,被选中的就变为3了,这就有问题的,这时我们需要使用key来给每天数据绑定一个特定的key

key的使用

在这里插入图片描述

直接给key绑定循环变量访问有问题:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

这时我们发现前面的问题解决了~

  • 注意: v-for 循环的时候,key 属性只能使用 number获取string
  • 注意: key 在使用的时候,必须使用 v-bind 属性绑定的形式,指定 key 的值
  • 在组件中,使用v-for循环的时候,或者在一些特殊情况中,如果 v-for 有问题,必须 在使用 v-for 的同时,指定 唯一的 字符串/数字 类型 :key 值
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/106500.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java的输入和输出语句_c++输入输出语句

    java的输入和输出语句_c++输入输出语句输入语句:psvm输出语句:sout

    2025年11月29日
    8
  • intelli idea激活码【最新永久激活】

    (intelli idea激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月31日
    123
  • 01背包问题回溯法_回溯法解决01背包问题时间复杂度

    01背包问题回溯法_回溯法解决01背包问题时间复杂度背景0-1背包是非常经典的算法问题,很多场景都可以抽象成这个问题模型。这个问题的经典解法是动态规划。不过还有一种简单但没有那么高效的解法,这里用的回溯算法。0-1背包问题有很多变体,我这里介绍一种比较基础的。我们有一个背包,背包总的承载重量是Wkg。现在我们有n个物品,每个物品的重量不等,并且不可分割。我们现在期望选择几件物品,装载到背包中。在不超过背包所能装载重量的前提下,如何让背包中…

    2022年10月8日
    3
  • 需求跟踪矩阵「建议收藏」

    需求跟踪矩阵「建议收藏」需求跟踪矩阵与需求双向跟踪(1)2006年08月22日星期二00:35刚刚接触CMMI的人在研究RequirementManagement这个PA的时候,对SP1.4MaintainBidirectionalTraceabilityofRequirements可能会比较疑惑,足以让国内大多数的没有真正软件工程开发管理的软件工程师,开发管理者不知所云

    2025年8月23日
    4
  • 软硬件版本号命名规范及原则是什么_文件版本号怎么编

    软硬件版本号命名规范及原则是什么_文件版本号怎么编1.软件版本阶段说明 Alpha版:此版本表示该软件在此阶段主要是以实现软件功能为主,通常只在软件开发者内部交流,一般而言,该版本软件的Bug较多,需要继续修改。 Beta版:该版本相对于α版已有了很大的改进,消除了严重的错误,但还是存在着一些缺陷,需要经过多次测试来进一步消除,此版本主要的修改对像是软件的UI。 RC版:该版本已经相当成熟了,基本上不存在导致错误的BUG,与即将发行的正式版相差无几。 Release版:该版本意味“最终版本”,在前面版本的一系列

    2025年10月20日
    3
  • CAS算法在Java中的应用

    CAS算法在Java中的应用参考上一篇文章的Java中LinkeList我们进行CAS的了解。Java语言中经常靠synchronized关键字保证同步的,这会导致有锁(也是我们经常所得重量级锁,因为其太过于繁重,所以才出现轻量级锁)。锁机制存在以下问题:(1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。(2)一个线程持有锁会导致其它所有需要此锁的线程挂起。(3)如果一个…

    2022年7月8日
    23

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号