前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Vue】「Vue.js 入门指南」(四)v-for 指令的使用技巧与案例实践

【Vue】「Vue.js 入门指南」(四)v-for 指令的使用技巧与案例实践

作者头像
sidiot
发布2024-02-01 10:36:28
6720
发布2024-02-01 10:36:28
举报
文章被收录于专栏:技术大杂烩

使用技巧

基本用法

v-for 是 Vue.js 中的一个指令,用于在数据集(如数组、对象等)上进行迭代,并为每个数据项生成一个 DOM 节点。例如,现在要展示 sɪᴅɪᴏᴛ 的技能列表 items,可以使用以下代码进行迭代:

代码语言:javascript
复制
<ul>
  <li v-for="item in items">{{ item }}</li>
</ul>

运行结果:

v1.png
v1.png

使用索引值

在迭代数据集时,有时需要使用当前迭代的索引值。可以使用 v-for 指令中的第二个参数 index 来获取当前迭代的索引值。例如显示当前技能为 sɪᴅɪᴏᴛ 的第几个技能:

代码语言:javascript
复制
<ul>
    <li v-for="(item, index) in items">
        第 {{ index+1 }} 技能:{{ item }}
    </li>
</ul>

运行结果:

v2.png
v2.png

对象迭代

除了对数组进行迭代外,v-for 还可以对对象进行迭代。在对象迭代中,可以使用 v-for 指令中的第二个和第三个参数 keyvalue 来获取当前迭代的键和值。例如显示 sɪᴅɪᴏᴛ 的个人信息:

代码语言:javascript
复制
<ul>
  <li v-for="(value, key) in person">{{ key }} - {{ value }}</li>
</ul>

运行结果:

v3.png
v3.png

使用 of 关键字

v-for 指令中,还可以使用 of 关键字代替 in 关键字。例如:

代码语言:javascript
复制
<ul>
  <li v-for="item of items">{{ item }}</li>
</ul>

运行结果:

v4.png
v4.png

v-for 指令】代码点击此处跳转

案例:电子记事本

经过上面的知识学习,让我们写一个小 demo 来练练手,巩固一下吧。

现在有电子记事本模板如下所示:

n1.png
n1.png

【电子记事本模板】代码点击此处跳转

接下来我们要完成以下功能的开发:

  • 渲染记录;
  • 添加记录;
  • 删除记录;
  • 统计记录;
  • 清空记录;

渲染记录

在模板中,渲染记录的代码如下所示:

代码语言:javascript
复制
<section class="main">
    <ul class="todo-list">
        <li class="todo">
            <div class="view">
                <span class="index">1.</span> <label>爱 sɪᴅɪᴏᴛ</label>
                <button class="destroy"></button>
            </div>
        </li>
    </ul>
</section>

如果有多条记录,则需要一条一条的添加代码,如下所示:

代码语言:javascript
复制
<span class="index">1.</span> <label>爱 sɪᴅɪᴏᴛ</label>
<span class="index">2</span> <label>...</label>
<span class="index">3.</span> <label>...</label>

这样不仅在开发时费时费力,对于后期维护也极其不方便,因此,这里我们通过使用 v-for 指令来优化这些问题。

先准备好数据:

代码语言:javascript
复制
data: {
    list: [
        { id: 1, name: '唱' },
        { id: 2, name: '跳' },
        { id: 3, name: 'rap' },
    ]
}

修改代码如下所示:

代码语言:javascript
复制
<li class="todo" v-for="(item, index) in list" :key="item.id">
    <div class="view">
        <span class="index">{{ index + 1 }}.</span> <label>{{ item.name }}</label>
        <button class="destroy"></button>
    </div>
</li>

运行结果:

n2.png
n2.png

添加记录

既然能渲染记录了,那么我们如何添加记录呢?

代码语言:javascript
复制
<header class="header">
    <h1>电子记事本</h1>
    <input placeholder="请输入任务" class="new-todo" />
    <button class="add">添加任务</button>
</header>

可以看到我们界面上有一个输入框,以及一个 “添加任务” 的按钮。在 Vue 中,我们需要给输入框绑定一个属性,以便传递我们在页面上输入的值,同时,我们还需要设计一个添加方法与按钮的点击事件进行绑定。

接下来,我们给输入框绑定一个属性 todoName,代码如下所示:

代码语言:javascript
复制
<input v-model="todoName"  placeholder="请输入任务" class="new-todo" />

如下图所示,当我们在输入框输入内容时,会绑定到属性 todoName 中:

n3.png
n3.png

最后,我们设计一个添加方法,由于我们的数据类型是数组,因此我们需要实现的是向数组中添加元素,代码如下所示:

代码语言:javascript
复制
add() {
    this.list.unshift({
        id: +new Date(),
        name: this.todoName
    })
    this.todoName = ''
}

在上述代码中,add() 函数的主要目的是在数组中添加一个新的待办事项,并清空输入字段 this.todoName。通过 unshift() 方法,将任务记录插入在数组的开头,这样更利于用户体验。

运行结果:

n4.png
n4.png

删除记录

既然有了添加记录,那么自然也得有删除记录的功能,大体思路就是根据 id 将元素从数组中移除,代码如下所示:

代码语言:javascript
复制
del(id) {
    this.list = this.list.filter(item => item.id !== id)
}

运行结果:

n5.png
n5.png

统计记录

相信你们雪亮的眼睛都发现了,无论我们是添加记录还是删除记录,左下角合计的数量都是没有变化的,这是因为在模板中,我们直接将合计的数量写死了,因此无论记录增加还是减少,合计的数量都不会发生变化:

代码语言:javascript
复制
<span class="todo-count">合 计:<strong> 1 </strong></span>

接下来,我们需要对此进行优化一下,方法其实也很简单,合计数量其实就是数组的长度,因此直接渲染 array.length 即可,代码如下所示:

代码语言:javascript
复制
<span class="todo-count">合 计:<strong> {{ list.length }} </strong></span>

运行结果:

n6.png
n6.png

清空记录

眼尖的友友们应该发现右下角还有一个 “清空任务” 的字眼,如果记录很多的话,我们一条一条的清除也太麻烦了,因此需要设计一个一次性全部清空的功能。

因为我们使用的是数组类型数据,所以最简单的清空方式就是赋值一个空数组,代码如下所示:

代码语言:javascript
复制
clear () {
  this.list = []
}

运行结果:

n7.png
n7.png

不过上图中没有任务时,还显示 “合计” 与 “清空任务” 可能不太美观,因此我们做一个小小的优化,在没有记录时,隐藏掉底部,代码如下所示:

代码语言:javascript
复制
<!-- 统计和清空 -->
<footer class="footer" v-show="list.length > 0">
    ...
</footer>

运行结果:

n8.png
n8.png

后记

在本文中,我们首先介绍了 v-for 指令的基本用法,然后详细讲解了如何使用索引值、对象迭代、以及使用 of 关键字的技巧。最后,我们通过一个 demo:电子记事本案例,演示了如何将这些技巧应用到实际项目中。

以上就是 Vue.js 入门指南:v-for 指令的使用技巧与最佳实践 的所有内容了,希望本篇博文对大家有所帮助!

代码:

参考:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-02-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基本用法
  • 使用索引值
  • 对象迭代
  • 使用 of 关键字
  • 案例:电子记事本
    • 渲染记录
      • 添加记录
        • 删除记录
          • 统计记录
            • 清空记录
            • 后记
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档