Vue中v-for、v-if、vshow等指令的使用

v-for指令

v-for指令使用来迭代遍历的,可以遍历数组、对象数组、对象和数字

  1. 遍历数组

    <div id="head"><!--遍历array1,将值放入arr中--><p v-for="arr in array1">{{arr}}</p>
    </div>
    <script>let vue1 = new Vue({el: "#head",data: {array1: ['a', 'b', 'c', 1, 2, 3]}});
    </script>
    

    首先在data中定义了一个数组array1,然后在p元素中使用v-for来遍历数组, 类似于for-each循环,这样array1中的每一项的值都会存入到arr中,然后使用插值表达式{{}}将arr渲染出来

    运行截图:

    可以看到数组array1的值在网页中渲染出来了

    修改上面的代码(p元素的代码)

    <div id="head"><p v-for="(value, index) in array1">--值是{{value}} ----索引是{{index}}</p>
    </div>
    <script>let vue1 = new Vue({el: "#head",data: {array1: ['a', 'b', 'c', 1, 2, 3]}});
    </script>
    

    可以看到v-for改成了v-for="(value, index) in array1", 其中括号中的value(第一个)代表遍历的值,index(第二个)代表索引(下标,从0开始),然后在插值表达式中就可以获取出来值和索引,当然里面的单词可以自己写,不一定要写成value和index,

    运行截图:

  2. 遍历数组对象

    修改上面的代码:

    <div id="head"><p v-for="arr in array2">---id是{{arr.id}} -----姓名是{{arr.name}}</p>
    </div>
    <script>let vue1 = new Vue({el: "#head",data: {array2: [{id: 1, name: '嬴政'},{id: 2, name: '刘彻'},{id: 3, name: '杨广'}]}});
    </script>
    

    在data中定义了一个对象数组array2,数组中有三个对象,然后在p元素中使用v-for指令遍历array2,通过arr.id的方式获取id,同理获取name。

    截图:

  3. 遍历对象

    继续修改上面的代码

    <div id="head"><p v-for="(value, key) in obj1">-----值是{{value}} --------键是{{key}} </p>
    </div>
    <script>let vue1 = new Vue({el: "#head",data: {obj1: {id: 4,name: '朱元璋',sex: '男'}}});
    </script>
    

    在data中定义一个对象obj1,里面有三个属性(键值对),然后在p元素使用v-for指令遍历obj1,括号中的value(第一个)代表值,例如朱元璋,key(代表键),例如name,注意值在前,键在后,别写反了

    运行截图:

  4. 迭代数字

    使用v-for指令还可以迭代数字,迭代的数字会从1开始(不是从0)

    修改代码

    <div id="head"><p v-for="number in 10">{{number}}</p>
    </div>
    <script>let vue1 = new Vue({el: "#head"});
    </script>
    

    在vue中没有定义data属性,在p元素中使用了v-for=“number in 10”,意思是迭代(遍历)10,从1开始直到10结束

    运行截图:

    修改p元素的代码:

    <p v-for="(number,a) in 10">---数字:{{number}} --------索引:{{a}}</p>
    

    运行截图:

    可以看到迭代数字数字的索引是从0开始的,别搞混了。

key的使用

在使用v-for的时候,会有个小问题,先写代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="libs/vue.js"></script>
</head>
<body>
<div id="head"><!--.number的意思是输入框中的值绑定到vue中时会转换成数字,默认是字符串--><label>id:</label><input v-model.number="id">&nbsp;&nbsp;<label>name</label><input v-model="name">&nbsp;&nbsp;<!--@是v-on:的缩写--><button @click="add">添加</button><p v-for="arr in array"><input type="checkbox"><label>{{arr.id}}---{{arr.name}}</label></p>
</div>
<script>let vue1 = new Vue({el: "#head",data: {id: null,name: null,array: [{id: 1, name: '嬴政'},{id: 2, name: '刘彻'},{id: 3, name: '杨广'}]},methods: {add: function () {//添加对象到数组array的头部this.array.unshift({id: this.id, name: this.name})}}});
</script>
</body>
</html>

运行截图:

在data定义了一个id和一个name,分别用来获取输入框中的值,使用了v-model进行了双向绑定(不知道v-model的可以看前一篇文章),然后定义了一个添加按钮,当按钮按钮时会执行methods中的add函数,将对象添加到array的头部

现在来添加0,朱元璋

截图:

可以发现,数据成功添加进去了,接下来我们勾选2号刘彻再进行添加

添加前截图(勾选2号刘彻)

接下来添加数据0,朱元璋

添加后截图

可以发现刚刚明明勾选的是2号刘彻,添加完数据后竟然勾选的是1号嬴政

官方的解释是:当 Vue.js 用 v-for 正在更新已渲染过的元素列表时,它默认用“就地复用”策略。如果数据项的顺序被改变,Vue 将不会移动 DOM 元素来匹配数据项的顺序, 而是简单复用此处每个元素,并且确保它在特定索引下显示已被渲染过的每个元素。这个默认的模式是高效的,但是只适用于不依赖子组件状态或临时 DOM 状态 (例如:表单输入值) 的列表渲染输出

简单的理解(当成数组理解)就是没使用key的话,你勾选的索引为1(第二个)的元素,当添加元素后,勾选的依然是索引为1(第二个)的元素,所以当添加0,朱元璋后,勾选的是1,嬴政,而不是2,刘彻。

那怎样解决这个问题呢,使用key的话可以完美的解决这个问题,给每个元素添加一个key,这个key只能是数字或者字符串,而且是唯一的,而我们的id正好是唯一的,所以修改div中的代码

<div id="head"><label>id:</label><input v-model.number="id">&nbsp;&nbsp;<label>name</label><input v-model="name">&nbsp;&nbsp;<!--@是v-on:的缩写--><button @click="add">添加</button><!--:是v-bind:的缩写--><p v-for="arr in array" :key="arr.id"><input type="checkbox"><label>{{arr.id}}---{{arr.name}}</label></p>
</div>

为p元素添加一个:key属性,将key进行单项绑定,key中的arr.id是唯一的,这样就可以为p元素指定一个唯一的key了,这时候再勾选一个元素,vue就是根据key来勾选,当元素索引值发生改变时,勾选的元素不会发生改变

勾选2号刘彻后运行 截图:

v-if和v-show的使用与区别

在第一篇中简单的介绍了一下v-if,这次再来介绍一下,并且与v-show进行对比

  1. v-if的使用

    v-if的作用可以使一个元素显示或者消失

    <div id="head"><p v-if="bool">格物致知</p>
    </div>
    <script>let vue1 = new Vue({el: '#head',data: {bool: true}});
    </script>
    

    运行后,页面中会显示格物致知四个字,当把bool修改为false后,页面中啥都没有了

    • 为true时截图

    • 为false时截图

  2. v-show的使用,v-show的作用和v-if的作用差不多

    修改上面的代码,将v-if改为v-show,再运行可以发现,和上面的一样,页面中会显示格物致知四个字,当把bool修改为false后,页面中啥都没有了

    <p v-show="bool">格物致知</p>
    

    图就不截了,和上面的图效果一样

  3. 两者的区别

    • v-if是通过删除或添加元素的方式来实现元素消失和显示

      将bool改为false后通过控制台查看p元素

      可以看到使用v-show的话,当bool为false的时候,p元素被删除了。

    • v-show是通过css样式的方式来实现元素的显示和消失

      将bool改为false后通过控制台查看p元素

      可以看到使用v-show的话,当bool为false的时候,p元素被添加了一个display为none的属性,从而让元素在页面中消失,

    • v-if比v-show更加的耗性能,所以当进行大量的同一元素显示和消失时使用v-show比较好,当需要完全移除一个元素,不让其在代码中显示则可以使用v-if

vue的简单使用3-v-for、v-if、v-show等指令的使用相关推荐

  1. 简单句的核心构成 n. + 谓语v.

    简单句的核心构成 n. + 谓语v. 谓语v.有实意 主谓 主谓宾 主谓双宾 主谓宾补 谓语v.无实意(连\系动词) 主系表 谓语v.有实意 不及物动词vi. 及物动词vt. 主谓 主谓宾 主谓双宾 ...

  2. Vue实现简单聊天对话框案例

    功能:实现双人简单聊天对话框,见效果图 代码如下: <!DOCTYPE html> <html lang="en"><head><meta ...

  3. 用php做一个简单的汇率,vue实现简单实时汇率计算功能

    最近在自己摸索vue的使用,因为相对于只是去看教程和实例,感觉不如自己动手写一个demo入门来的快.刚好看到小程序中有一个简单但是很精致的应用极简汇率,而且它的表现形式和vue的表现形式很像,于是想着 ...

  4. react构建淘票票webapp,及react与vue的简单比较。

    前言 前段时间使用vue2.0构建了淘票票页面,并写了一篇相关文章vue2.0构建淘票票webapp,得到了很多童鞋的支持,因此这些天又使用react重构了下这个项目,目的无他,只为了学习和共同进步! ...

  5. 前端app调起摄像头 只显示在页面_猫也能看得懂的教程之一分钟使用Vue搭建简单Web页面...

    本教程适合人群: 已经了解过过html.js.css,想深入学习前端技术的小伙伴 有前端开发经验.但是没有使用过Vue的小伙伴 有过其他编程经验,对前端开发感兴趣的小伙伴 学习本教程之后你将会: 了解 ...

  6. 基于vue-cli、elementUI的Vue超简单入门小例子

    基于vue-cli.elementUI的Vue超简单入门小例子 这个例子还是比较简单的,独立完成后,能大概知道vue是干嘛的,可以写个todoList的小例子. 开始写例子之前,先对环境的部署做点简单 ...

  7. c语言求最多啤酒数,C语言,算法、动态规划:有一个箱子的容量为v(正整数,0=v=20000),同时有n个物品(0n=30),...

    满意答案 24k纯真爱l 2013.11.07 采纳率:42%    等级:12 已帮助:9552人 #include #define N 30 int xiangzi(int n ,int V ,i ...

  8. 01.vue的简单实例

    前段框架vue.js非常热门,每个vue应用都是通过创建vue函数创建新的vue实例开始,首先我们来创建一个简单的vue实例 多手动写写代码,你会发现真的很烦躁 <!DOCTYPE html&g ...

  9. Vue实现简单图表~满满的干货

    文章目录 前提:安装数据报表的插件 Vue实现简单图表的步骤 导入echarts 为ECharts准备一个具备大小(宽高)的Dom 基于准备好的dom,初始化echarts实例 指定图表的配置项和数据 ...

  10. T a(v);和T a = v;的区别

    本文所说的类型T均指UDT,非built-in类型 构造一个对象,有如下三种形式: 1.T a; 这个没什么好说的,调用default ctor来构造a 不过要注意的是,要么T就一个ctor也没有,编 ...

最新文章

  1. ASP.NET 防盗链源码
  2. 基于 Nginx XSendfile + SpringMVC 进行文件下载
  3. Spring for Android 1.0.0发布
  4. C++类的组合和前向引用
  5. 网络自己发 sip invite_IP话机网页配置SIP账号
  6. Java多线程学习二十九:AtomicInteger(原子类) 和 synchronized 的异同点?
  7. OpenCV之图像的平滑(笔记09)
  8. Proteus十字路口交通灯
  9. mysql 密码注入_SQL注入原理——万能密码注入
  10. 【数模智能算法】BP神经网络基本算法原理
  11. Blender导出模型到maya
  12. Frps一键安装脚本,带Frpc Windows便捷启动脚本
  13. 为什么程序员不缺网?三步教你破解WiFi密码,够简单!
  14. 传统语音识别介绍【五】—— 单音素和三音素
  15. 数仓建模—增量数据处理
  16. vue3的自定义指令directives
  17. SOA,SOAP,RPC,以及 RPC协议与 REST 协议之间的关系(搜狗)
  18. 开盘15分钟内扑捉当天黑马
  19. React之MobX使用
  20. 【原理+源码详细解读】从Transformer到ViT

热门文章

  1. 无法访问网上邻居/网络打印机的解决方法
  2. 迈阿密大学计算机学科排名,迈阿密大学计算机科学(论文)专业介绍_计算机科学(论文)专业排名及就业方向和前景-小站留学...
  3. Cesium平台构建诗词地图故事
  4. 思考如何概括“技术美术”(Technical Artist)的职责
  5. 大数据云计算学习路线
  6. 关于‘-[UIViewController _loadViewFromNibNamed:bundle:] loaded the “XXXView“ nib but the view outlet wa
  7. 子类重写父类构造器以及其他方法
  8. 5G无线关键技术 — 非正交多址接入技术
  9. 关于在校专利软著申请一二事
  10. 拟合数据时报错Number of calls to function has reached maxfev = 1000