条件渲染

v-if

v-if会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建。

<div id="app"><h3 v-if="ok">Title</h3><p v-if="no">Paragraph 1</p><p v-if="ok">Paragraph 2</p>
</div>
<script>
new Vue({el: '#app',data: {ok: true,no: false}
})
</script>

在 template 元素上使用 v-if 条件渲染分组

因为v-if是一个指令,所以必须将它添加到一个元素上。但是如果想切换多个元素呢?此时可以把一个<template>元素当做不可见的包裹元素,并在上面使用 v-if。最终的渲染结果将不包含<template>元素。

<div id="app"><template v-if="show"><h1>Title</h1><p>Paragraph 1</p><p>Paragraph 2</p></template>
</div>
<script>
new Vue({el: '#app',data: {show: true}
})
</script>

v-else

v-else 元素必须紧跟在带 v-if 或者 v-else-if 的元素的后面,否则它将不会被识别。

<div id="app"><!-- 如果ok为true 第一个div重建 第二个销毁 --><!-- 如果ok为false 第一个div销毁 第二个重建 --><div v-if="ok">Hello...</div><div v-else>World...</div><div v-if="num == 10">num = {{num}}</div><div v-else>num != 10</div>
</div>
<script>
new Vue({el: '#app',data: {ok: false,num: 10}
})
</script>

v-else-if

类似于 v-elsev-else-if也必须紧跟在带 v-if 或者 v-else-if 的元素之后。

<div id="app"><!-- 返回条件成立的内容 并退出判断 --><div v-if="num>10"> num = {{num}} </div><div v-else-if="num>5"> num > 5 </div><div v-else-if="num<5"> num < 5 </div>
</div>
<script>
new Vue({el: '#app',data: {num: 11}
})
</script>

用 key 管理可复用的元素

以下说明示例中的2个两个模板使用了相同的元素,如果我们不想让他们重复使用,只需添加一个具有唯一值的 key 属性即可

<div id="app"><template v-if="loginType === 'username'"><label>UserName </label><input type="text" placeholder="Enter your username"></template><template v-else><label>Email </label><input type="text" placeholder="Enter your email address"></template><input v-on:click="btn" type="button" value="切换">
</div>
<script>
new Vue({el: '#app',data: {loginType: 'username'},methods: {btn: function(){if(this.loginType === "username"){this.loginType = "email"}else{this.loginType = 'username'}}}
})
</script>

那么在上面的代码中切换 loginType 将不会清除用户已经输入的内容。因为两个模板使用了相同的元素,<input> 不会被替换掉——仅仅是替换了它的 placeholder

Vue 为你提供了一种方式来表达“这两个元素是完全独立的,不要复用它们”。只需添加一个具有唯一值的 key 属性即可。
现在,每次切换时,输入框都将被重新渲染

<div id="app"><template v-if="loginType === 'username'"><label>UserName </label><input key="username-input" placeholder="Enter your username"></template><template v-else><label>Email </label><input key="email-input" placeholder="Enter your email address"></template><input v-on:click="btn" type="button" value="切换">
</div>
<script>
new Vue({el: '#app',data: {loginType: 'username'},methods: {btn: function(){if(this.loginType === "username"){this.loginType = "email"}else{this.loginType = 'username'}}}
})
</script>

v-show

v-show 只是简单地切换元素的 CSS 属性 display,为false的时候,则display: none

v-show 不支持 <template> 元素,也不支持 v-else

<div id="app"><p v-show="ok">永远相信美好的事情即将发生</p>
</div>
<script>
new Vue({el: '#app',data: {ok: false}
})
</script>

v-if 与 v-show

v-if 是“真正”的条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建。
v-if 也是惰性的:如果在初始渲染时条件为假,则什么也不做——直到条件第一次变为真时,才会开始渲染条件块。
相比之下,v-show 就简单得多——不管初始条件是什么,元素总是会被渲染,并且只是简单地基于 CSS 进行切换。
一般来说,v-if 有更高的切换开销,而 v-show 有更高的初始渲染开销。因此,如果需要非常频繁地切换,则使用 v-show 较好;如果在运行时条件很少改变,则使用 v-if 较好。

列表渲染

v-for 数组渲染

数组渲染 提供两个参数 ( 值, 索引 )

<div id="app"><p v-for=" (item, index) in items">{{index}} - {{item}}</p>
</div>
<script>
new Vue({el: '#app',data: {items: [ 'foo1', 'foo2', 'foo3', 'foo4']}
})
</script>

v-for 对象渲染

对象渲染 提供三个参数 ( 值, 键名, 索引 )

<div id="app"><p v-for=" (value, key, index) in object">{{index}}. {{key}} : {{value}}</p>
</div>
<script>
new Vue({el: '#app',data: {object: {firstName: 'xiaobai',lastName: 'heibai',age: 18}}
})
</script>

显示过滤/排序结果

有时,我们想要显示一个数组的过滤或排序副本,而不实际改变或重置原始数据。在这种情况下,可以创建返回过滤或排序数组的计算属性。

<div id="app"><p v-for=" n in evenArr">{{n}}</p>
</div>
<script>
new Vue({el: '#app',data: {arr: [1, 10, 3, 5, 9, 4, 6]},computed: {// 过滤数组双数的值evenArr: function(){return this.arr.filter(function(arr){return arr % 2 === 1;})},// 排序evenArr2: function(){return this.arr.sort(function(a, b){return a - b})}}
})
</script>

在计算属性不适用的情况下 (例如,在嵌套 v-for 循环中) 你可以使用一个 method 方法:

<div id="app"><p v-for=" n in even(arr) ">{{n}}</p>
</div>
<script>
new Vue({el: '#app',data: {arr: [1, 10, 3, 5, 9, 4, 6]},methods: {even: function(arr){return arr.filter(function(arr){return arr % 2 === 1;})}}
})
</script>

v-for in template

类似于 v-if,可以利用带有 v-for<template>渲染多个元素

<div id="app"><template v-for="(item, key, index) in items"><p>{{item}}</p>   <div>{{index}}. {{key}} - {{item}}</div></template>
</div>
<script>
new Vue({el: '#app',data: {items: {firstName: 'heibai',lastName: 'xiaobai',age: 18}}
})
</script>

v-for with v-if

当它们处于同一节点,v-for 的优先级比 v-if 更高,这意味着 v-if 将分别重复运行于每个 v-for 循环中。当你想为仅有的一些项渲染节点时,这种优先级的机制会十分有用。
下面这个例子是先进行 v-for 的渲染,然后在进行 v-if 的渲染。

<div id="app"><div v-if="item.ok" v-for="(item, key) in items">{{item.test}}</div> <div v-else>你看吧</div>
</div>
<script>
new Vue({el: '#app',data: {items: [{ test: 'xiaobai', ok: true},{ test: 'heibai', ok: false},{ test: 18, ok: true}]}
})
</script>

如果你的目的是有条件地跳过循环的执行,那么可以将 v-if 置于外层元素 (或 <template>)上

<div id="app"><div v-if="ok"><div v-for="item in items">{{item.test}}</div> </div>
</div>
<script>
new Vue({el: '#app',data: {ok: true,items: [{ test: 'xiaobai'},{ test: 'heibai'},{ test: 18}]}
})
</script>

转载于:https://www.cnblogs.com/xiaobaiv/p/9143104.html

Vue - 条件渲染与列表渲染相关推荐

  1. vue隐藏浏览器_一分钟学会Vue的条件渲染和列表渲染

    介绍 之前一段时间由于工作很忙,没有时间继续学习Vue,今天算是继续对之前的学习进行补充了,今天要学习的便是Vue的条件渲染和列表渲染,我们将讨论if.if-else.if-else-if,show等 ...

  2. vue 限制渲染条数_深入理解Vue 的条件渲染和列表渲染

    这两天学习了Vue.js 感觉条件渲染和列表渲染知识点挺多的,而且很重要,所以,今天添加一点小笔记. 条件渲染 v-if 在 < template > 中配合 v-if 渲染一整组 在使用 ...

  3. 3.Vue.js前端框架:条件判断与列表渲染

    3.1 条件判断 在视图中,经常需要控制某些DOM元素的显示或隐藏.Vue.js提供了多个指令来实现条件的判断,包括 v-if.v-else.v-else-if.v-show指令.下面分别进行介绍. ...

  4. react把表格渲染好ui_react 入坑笔记(五) - 条件渲染和列表渲染

    条件渲染和列表渲染 一.条件渲染 条件渲染较简单,使用 JavaScript 操作符 if 或条件运算符来创建表示当前状态的元素,然后让 React 根据它们来更新 UI. 贴一个小栗子: funct ...

  5. 微信小程序实现lot开发04 条件渲染与列表渲染

    我的网络继电器设备到了,今天下午也是很开心的测试了一波,很有意思,通过网络连接去阿里云的服务器,通过服务器实现对网段中的硬件发送控制信息以及收取状态反馈信息,可以发现基于mqtt协议,UDP协议里的网 ...

  6. 微信小程序入门与实战之条件渲染、列表渲染与小程序事件

    使用LinUI的Icon组件代替图片ICON 引入LinUI的icon库: "usingComponents": {"l-icon":"/minipr ...

  7. 微信小程序开发(五)小程序条件渲染和列表渲染

    说到条件,相比大家都是很熟悉的了,要么符合什么什么条件,要么不符合什么什么条件,在我们的编程里就是if else,从if开始到else结束.比如我们说小明的考试成绩出来了,如果分数大于60分及格,不然 ...

  8. Vue的常用指令(v-html {{}}文本插值,v-bind绑定属性,v-if条件渲染,v-for列表渲染,v-on @ 事件绑定,v-model表单绑定)

    Vue的常用指令(文本插值,绑定属性,条件渲染,列表渲染,事件绑定,表单绑定) Vue 的介绍 Vue 是一套构建用户界面的渐进式前端框架. 只关注视图层,并且非常容易学习,还可以很方便的与其它库或已 ...

  9. angular,vue,react的基本语法—双向数据绑定、条件渲染、列表渲染、angular小案例...

    基本语法: 1.双向数据绑定 vue 指令:v-model="msg" react constructor(){this.state{msg:"双向数据绑定" ...

最新文章

  1. 基于头皮脑电的癫痫分类
  2. 聚焦AI落地痛点,纵论跨域学习技术前沿和应用趋势 | CNCC技术论坛
  3. 巨鲸任务调度平台:spark flink任务调度
  4. 如何在Apache环境下配置Rewrite规则
  5. 浅析MSIL中间语言——基础篇
  6. Intel超线程技术 Hyper-Threading Technology (1) - 引言与历史
  7. 2016年中国国际信息通信展览会在北京开幕
  8. 加密芯片在汽车无钥匙启动行业的应用
  9. 蓝桥杯 ALGO-10 算法训练 集合运算
  10. 数据结构与算法学习网
  11. C++ 安全单例模式总结
  12. .NET清除Session 的几个方法[clear/removeAll/remove/Abandon]
  13. cs224n学习笔记 2
  14. 问题 E: LZY去年买了个表
  15. css的nth选择器,CSS选择器之nth
  16. 公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱, 用100文钱买一百只鸡,其中公鸡,母鸡,小鸡都必须要有,问公鸡,母鸡,小鸡要买多少只刚好凑足100文钱。
  17. 什么是“系统空闲进程”,为什么使用那么多的CPU?
  18. 如何将前端echats 图表插入到execl 中
  19. Tomcat和Was服务器中文乱码问题总结
  20. 物联网应用系统三层结构的设计_基于物联网技术的智能油烟在线监测系统的设计与应用...

热门文章

  1. Python学习 Day4-1 Python3 条件控制、循环语句
  2. [Java] 一、对象的创建 销毁
  3. java内存管理总结
  4. 实验一 命令解释程序的编写
  5. 大数四则运算java(转)
  6. linux网络编程之socket:使用fork并发处理多个client的请求
  7. [转] Tomcat 系统架构与设计模式,第 1 部分: 工作原理
  8. 两篇讲述Skinned Mesh原理的文章
  9. java 蓝桥杯算法训练 寂寞的数(题解)
  10. python随机产生10个数然后前5个升序后5个降序_编写程序,生成包含 20 个随机数的列表,然后将前 10 个元素升序排列,后 10 个元素降序排列,并输出结果。_学小易找答案...