一、条件渲染

条件判断渲染相关的指令:

  • v-if
  • v-else
  • v-elif
  • v-show

1. v-if

v-if 指令用于条件性地渲染一块内容。这块内容只会在指令的表达式返回 true 值的时候被渲染。

例如:

<h2 v-if="isShow">
<div>abc</div>
<div>abc</div>
<div>abc</div>
<div>abc</div>
Hello world!
</h2>

isShowtrue 时:

而为 false 时:

2. 与v-else配合使用

<div id="app">
<h2 v-if="isShow">
<div>abc</div>
<div>abc</div>
<div>abc</div>
<div>abc</div>
Hello world!
</h2>
<h2 v-else>
如果isShow==false,显示我
</h2>
</div>

isShowfalse时:

3. 与v-else-if配合使用

<div id="app">
<!-- 但一般不这样使用,一般条件很多的时候在计算属性中解决 -->
<h2 v-if="score>=90">优秀</h2>
<h2 v-else-if="score>=80">良好</h2>
<h2 v-else-if="score>=60">及格</h2>
<h2 v-else>不及格</h2>
分数:<input type="text" v-model="score">
</div> <script>
var app = new Vue({
el: '#app',
data: {
score: 99
}
});
</script>

运行结果:




4. v-show的使用

用法和 v-if 基本一致:

<!-- v-if: 当条件为false时,包含v-if指令的元素根本不存在(一次)-->
<h2 v-if="isShow" id="aaa">{{message}}</h2> <!-- 而v-show只是添加了行内样式而已(频繁变化时)-->
<h2 v-show="isShow" id="bbb">{{message}}</h2>

官网给出来的两者的区别:

5. 类型切换案例

<span v-if="isUser">
<label for="username">用户账号</label>
<input type="text" placeholder="用户账号" id="username" key="username">
</span>
<span v-else>
<label for="email">用户邮箱</label>
<input type="text" placeholder="用户邮箱" id="email" key="email">
</span>
<button @click="change_login_type">切换类型</button>
var app = new Vue({
el: '#app',
data: {
isUser: true
},
methods: {
change_login_type() {
this.isUser = !this.isUser;
}
}
});


二、列表渲染

我们可以用 v-for 指令基于一个数组来渲染一个列表。v-for 指令需要使用 item in items 形式的特殊语法,其中 items 是源数据数组,而 item 则是被迭代的数组元素的别名

1. 遍历数组

准备数据:

var app = new Vue({
el: '#app',
data: {
names: ['mike', 'jack', 'sara']
},
methods: {}
});

遍历渲染:

<!-- 没有使用下标值 -->
<ul>
<li v-for="item in names">{{item}}</li>
</ul>

当需要使用下标值时使用:(item, index) in items形式的语法:

<!-- 获取索引值 -->
<ul>
<li v-for="(item, index) in names">
{{index+1}} -- {{item}}
</li>
</ul>

运行结果:

此外也可以使用 item of items 的语法。

2. 遍历对象

语法:

遍历对象的所有值:v-for="value in myObject"

此外也可以通过:v-for="(value, name) in myObject" 来获取键信息

示例:

准备数据

var app = new Vue({
el: '#app',
data: {
info: {
name: "why",
age: 18,
height: 1.88
}
},
methods: {}
});

获取value

<ul>
<!-- 1.value -->
<li v-for="item in info">
{{item}}
</li>
</ul>

同时获取key

<!-- 2.获取key-value -->
<ul>
<li v-for="(key, value) in info">
{{key}} -- {{value}}
</li>
</ul>

同时获取index

<ul>
<li v-for="(key, value, index) in info">
{{index+1}}--{{key}}--{{value}}
</li>
</ul>

运行结果:

3. 循环渲染中key的使用

以下解释摘自官网:https://v3.cn.vuejs.org/api/special-attributes.html#key

key 特殊 attribute 主要用做 Vue 的虚拟 DOM 算法的提示,以在比对新旧节点组时辨识 VNodes。如果不使用 key,Vue 会使用一种算法来最小化元素的移动并且尽可能尝试就地修改/复用相同类型元素。而使用 key 时,它会基于 key 的顺序变化重新排列元素,并且 key 不再存在的元素将始终被移除/销毁。

有相同父元素的子元素必须有唯一的 key。重复的 key 会造成渲染错误。

简单来说使用key可以提高程序的效率,但需要保证相同父元素的子元素必须有唯一的 key

但是对于一般的数组来说是不能使用index作为 v-for 指令的 key 的,详细解析见:Vue2.0 v-for 中 :key 到底有什么用? - 方应杭的回答 - 知乎 https://www.zhihu.com/question/61064119/answer/766607894

那如果不使用 index ,那使用什么东西作为 key 呢?这里知乎大神给出了答案:

没有 id 怎么办?

  1. 创建一个 id() 函数,每次调用自增一
  2. 使用 guid 库或者 uuid() 库
  3. 最好使用数据库中的 id

具体示例如下:

var app = new Vue({
el: '#app',
data: {
letters: ['a', 'b', 'c', 'd', 'e'],
curId: 0
},
methods: {
getId() {
res = this.curId;
this.curId++;
return res;
}
}
});
<div id="app">
<ul>
<li v-for="item in letters" :key="getId()">{{item}} </li>
</ul>
</div>

运行结果:

4. 哪些数组方法是响应式的

是响应式的方法:

  1. push(Object obj)
  2. pop()
  3. shift() 删除第一个
  4. unshift() 在数组前面添加元素,可以多个
  5. splice() 移除指定下标范围的元素
  6. sort() 排序元素
  7. reverse() 反转元素
  8. 使用Vue.set(this.xxx, 0, "aaa")来代替 this.xxx[0]="aaa"; 修改元素的值。

5. CoderWhy老师留下作业的完成

要求:展示出列表 ['海王', '海尔兄弟', '火影忍者', '进击的巨人'] 中的数据,当鼠标点击某个文本时,该文本变成红色,而其他文本为原来的黑色。(即选中高亮

css部分:

.active {
color: red;
}

js部分:

var app = new Vue({
el: '#app',
data: {
movies: ['海王', '海尔兄弟', '火影忍者', '进击的巨人'],
currentIndex: -1
},
methods: {
onClick(li_index) {
this.currentIndex = li_index;
}
}
});

html部分:

<ul>
<!-- <li v-for="movie in movies">{{movie}}</li> -->
<li v-for="(movie, index) in movies" :class="{active:index===currentIndex}" @click="onClick(index)">
{{movie}}
</li>
</ul>

实现效果:

点击第一个:

点击第三个:

Vue学习笔记(三)条件渲染和循环渲染的更多相关文章

  1. vue学习笔记(三)class和style绑定

    前言 通过上一章的学习vue学习笔记(二)vue的生命周期和钩子函数,我们已经更近一步的知道了关于vue的一些知识,本篇博客将进一步探讨vue其它方面的内容,vue中关于class和style绑定,关 ...

  2. vue学习笔记(五)条件渲染和列表渲染

    前言 在众多的编程语言中,我们的基础语法总是少不了一些专业语法,比如像定义变量,条件语句,for循环,数组,函数等等,vue.js这个优秀的前端框架中也有同样的语法,我们换一个名词,将条件语句改成专业 ...

  3. Vue学习笔记三:v-bind,v-on的使用

    目录 v-bind:绑定属性值,内容相当于js,缩写: v-on:绑定方法,缩写@ 总结 v-bind:绑定属性值,内容相当于js,缩写: 我添加了一个input标签,如下 <input typ ...

  4. VUE 学习笔记 三 模板语法

    1.插值 a.文本 数据绑定最常见的形式就是使用“Mustache”语法 (双大括号) 的文本插值 <span>Message: {{ msg }}</span> v-once ...

  5. python3学习笔记.3.条件控制与循环

    1.条件控制 关键字 if.elif.else 一般形式如下: if 条件1: 结果1 elif 条件2: 结果2 else: 结果3 注意:条件后的:语句的缩进的是相同的   2.循环语句 关键字有 ...

  6. 【Linux_Shell 脚本编程学习笔记三、分支与循环结构】

    if 语句是实际生产工作中最重要且最常用的语句,所以,必须掌握牢固 if 条件语法 1. 单分支机构 if  [ 条件 ] then 指令 fi 或 if  [  条件 ]; then 指令 fi   ...

  7. vue学习笔记(三):vue-cli脚手架搭建

    一:安装vue-cli脚手架: 1:为了确保你的node版本在4.*以上,输入 node -v 查看本机node版本,低于4请更新. 2:输入:  npm install -g vue-cli     ...

  8. vue学习笔记三:常见的表单绑定

    <template> <div id="app"> <input type="checkbox" id="checked ...

  9. vue学习笔记(四)事件处理器

    前言 在上一章vue学习笔记(三)class和style绑定的内容中,我们学习了如何在vue中绑定class和style,介绍了常用的绑定方法,class的数组绑定和对象绑定以及style的数组绑定和 ...

  10. Vue学习笔记-Vue.js-2.X 学习(三)===>组件化高级

    (四) 组件化高级 1.插槽(slot)的基本使用 A:基本使用: <slot></slot> B:默认置:<slot><h1>中间可以放默认值< ...

随机推荐

  1. LCD1602液晶显示模块的单片机驱动深入详解之硬件篇

    (本文以HD44780主控芯片的LCD1602为蓝本进行描述,其中的截图也来自HD44780数据手册,用户可自行搜索其datasheet,有部分整理网上的,但绝对要比你看到的要深入得多) 一.接口 L ...

  2. Android EditText输入框实现下拉且保存最近5个历史记录

    文章结构: 一.需求阐述 技术部同事提出想要在APP上保存最近输入成功的5个密钥信息,同时支持可以下拉进行选择. 这也是为了方便客户在现在多次输入信息,帮助其快速进行输入. 二.实现思路: 目前想要实 ...

  3. excel VBA中Xldown和xlup用法

    1.Worksheets("Sheet1").Range("A1").End(xlDown).Select     '意思为自A1起,返回从上往下的最后一个非空 ...

  4. QObject::startTimer: timers cannot be started from another thread 一则输出调试:关于QT的线程关联性

    开始 今天在调试输出里看见QObject::startTimer: timers cannot be started from another thread QTimer类 从Qt的帮助文档里可以得到 ...

  5. 24、dhcp服务搭建

    1.dhcp介绍: DHCP(Dynamic Host Configuration Protocol),动态主机配置协议,DHCP 协议主要是用来自动为局域网中的客户机分配 TCP/IP 信息的网络协 ...

  6. k8s结合jumpserver做kubectl权限控制 用户在多个namespaces的访问权限 rbac权限控制

    圈子太小,做人留一面,日后好相见. 其实这个文章就是用户用jumpserver登录到k8s master节点 然后执行kubectl的时候只有自己namespaces的所有权限. 背景 1,k8s 有 ...

  7. 《面试八股文》之kafka21卷

    微信公众号:moon聊技术 关注选择" 星标 ", 重磅干货,第一 时间送达! [如果你觉得文章对你有帮助,欢迎关注,在看,点赞,转发] 大家好,我是moon,最新一篇面试八股文系 ...

  8. 并发王者课-铂金10:能工巧匠-ThreadLocal如何为线程打造私有数据空间

    欢迎来到<并发王者课>,本文是该系列文章中的第23篇,铂金中的第10篇. 说起ThreadLocal,相信你对它的名字一定不陌生.在并发编程中,它有着较高的出场率,并且也是面试中的高频面试 ...

  9. 2、nacos

    1.Nacos官方文档的说明已经很清晰了. https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html 2.前提条件 https://nacos ...

  10. 关于mysql binlog二进制

    binlog 在mysql中,当发生数据变更时,都会将变更数据的语句,通过二进制形式,存储到binlog日志文件中. 通过binlog文件,你可以查看mysql一段时间内,对数据库的所有改动. 也可以 ...