【Vue】条件与循环语句 | v-if v-show v-for实例

简介: 【Vue】条件与循环语句 | v-if v-show v-for实例

条件与循环语句


引言


前端开发之中, 灵活的控制渲染是很有必要的,快速构建也是很有必要的,条件渲染和循环渲染,在视图构建中起着重要作用.


条件语句

v-if

v-if 指令用于条件性地渲染内容


此内容只会在指令的表达式返回除了 false,0,"",null,undefined 和 NaN 外的值的时候被渲染

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>v-if</title>
        <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.9/vue.js"></script>
    </head>
    <body>
        <div id="app">
            <h1 v-if="display"> Blog: uiuing.com </h1>
        </div>
        <script>
            let vm = new Vue({
                el: "#app",
                data: {
                    display: true
                },
            })
        </script>
    </body>
</html>

display等于true

1.png



display等于false


2.png


当然还有 v-else-if, 此处不做演示, 和平常的高级语言相同


v-else

这和高级语言里的判断语句else是一样的

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>v-if & v-else</title>
        <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.9/vue.js"></script>
    </head>
    <body>
        <div id="app">
            <h1 v-if="display"> Blog: uiuing.com </h1>
            <h1 v-else> uiuing </h1>
        </div>
        <script>
            let vm = new Vue({
                el: "#app",
                data: {
                    display: true
                },
            })
        </script>
    </body>
</html>


3.png

4.png

v-show

效果和v-if相同


<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>v-if</title>
        <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.9/vue.js"></script>
    </head>
    <body>
        <div id="app">
            <h1 v-show="display"> Blog: uiuing.com </h1>
        </div>
        <script>
            let vm = new Vue({
                el: "#app",
                data: {
                    display: true
                },
            })
        </script>
    </body>
</html>



不再展示效果了, 同上


v-if 和 v-show

v-if 会牵涉到虚拟 DOM diff 算法,有更高的切换开销,而 v-show 有更高的初始渲染开销。因此,如果需要非常频繁地切换,则使用 v-show 较好;如果在运行时条件很少改变,则使用 v-if 较好


但是需要提醒很重要的一点是:v-show类似css的display,而v-if 才是标准的条件判断语句



循环语句


循环语句可以节省DOM操作的工作量, 将一些重复但又具备相同特质的内容渲染


v-for之数组

语法与python类似

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>v-if</title>
        <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.9/vue.js"></script>
    </head>
    <body>
        <div id="app">
            <ul>
                <li v-for="navItem in nav">
                    {{ navItem }}
                </li>
            </ul>
        </div>
        <script>
            let vm = new Vue({
                el: "#app",
                data: {
                    nav: [1, 2, 3, 4, 5, 6]
                },
            })
        </script>
    </body>
</html>

5.png

v-for之对象

如果你对对象的概念很模糊的话, 你可以参考下面的字典

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>v-if</title>
        <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.9/vue.js"></script>
    </head>
    <body>
        <div id="app">
            <ul>
                <li v-for="navItem in nav">
                    {{ navItem }}
                </li>
            </ul>
        </div>
        <script>
            let vm = new Vue({
                el: "#app",
                data: {
                    nav: {
                        one: 1,
                        two: 2,
                        three: 3
                    }
                },
            })
        </script>
    </body>
</html>

6.png


你还可以这样


<li v-for="(navItem,index) in nav">

7.png


字典显示key,数组显示位置下标


注意 !


还是由于 JavaScript 的限制,Vue 不能检测对象属性的添加或删除,直接进行添加修改数据,这样操作是不会构成响应式,不会触发视图更新。必须使用 Vue.set(object, key, value) 方法向嵌套对象添加响应式属性

Vue.set(vm.nav,'one', '4');

所以,使用对象方法时,要想触发视图更新,常常需要使用 Vue.set()去操作。


key属性

为了重用和重新排序现有元素,你可以给每项提供一个唯一 key 属性


理想的 key 值是每项都有的唯一 id, 这个特殊的属性相当于 Vue 1.x 的 track-by ,但它的工作方式类似于一个属性,所以你需要用 v-bind 来绑定动态值 (在这里使用简写):

<div v-for="item in items" :key="item.id">
</div>

注意: key 不与 v-for 特别关联,建议尽可能在使用 v-for 时提供 key,除非遍历输出的 DOM 内容非常简单,或者是刻意


检测数据更新

方法

  • push()
  • pop()
  • shift()
  • unshift()
  • splice()
  • sort()
  • reverse()


以上方法,会直接改变原始数组称为变异方法,使视图自动更新


替换数组

学了 JavaScript 标准对象库,都知道有些数组方法是不直接改变原数组的,这里称他们为非变异方法,例如:filter()、slice()、concat(),他们都是返回一个新数组


在 Vue 中使用到这些方法,我们必须使用数组替换法,将非变异方法返回的新数组直接赋值给的旧数组

this.nav = this.nav.slice(1, 4);

注意

由于 JavaScript 的限制,Vue 不能检测以下变动的数组:


  1. 利用索引直接设置
  2. 修改数组的长度


直接这样改值操作是没有问题的,但是不是响应式的,并不能触发视图更新


例如这样的操作 app.items[indexOfItem] = newValue ,可以用以下两种代替

// Vue.set
Vue.set(vm.items, indexOfItem, newValue);
// Array.prototype.splice
vm.items.splice(indexOfItem, 1, newValue);

显示过滤

显示一个数组的过滤或排序副本,可以创建返回过滤或排序数组的计算属性, 使用computed 实现


案例

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <script src="https://cdn.bootcdn.net/ajax/libs/echarts/5.1.2/echarts.js"></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/vue/3.2.0-beta.7/vue.global.js"></script>
  </head>
  <body>
    <div id="app">
      <ul>
        <li v-for="num in evenNumber" >
            {{ num }}
        </li>
      </ul>
    </div>
    <script>
      let app = {
        data() {
          return {
            numberArray: [1, 2, 3, 4, 5, 6, 7, 8],
          };
        },
        computed: {
          evenNumber: function () {
            return this.numberArray.filter(num => {
              return num % 2 === 0;
            });
          },
        },
      };
      Vue.createApp(app).mount("#app");
    </script>
  </body>
</html>

0.png

相关实践学习
Serverless极速搭建Hexo博客
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
目录
相关文章
|
2月前
|
JavaScript 索引
vue 在 v-for 时给每项元素绑定事件
在 Vue 中使用 v-for 渲染列表时,可以通过给每项元素绑定事件来实现交互功能。通常使用 `@click` 等事件修饰符,结合方法或内联表达式来处理事件。例如:`&lt;li v-for=&quot;item in items&quot; @click=&quot;handleClick(item)&quot;&gt;{{ item }}&lt;/li&gt;`。
|
2月前
|
JavaScript 前端开发 开发者
Vue v-for 进阶指南:in 与 of 的区别及应用场景 | 笔记
Vue.js 中的 v-for 是强大的遍历指令,但其中的 in 和 of 关键字往往被开发者忽视。尽管它们的用法相似,但适用的场景和数据结构却各有不同。本文将详细探讨 v-for 中 in 和 of 的区别、适用场景以及在实际开发中的最佳使用时机。通过理解它们的差异,你将能够编写更加高效、简洁的 Vue.js 代码,灵活应对各种数据结构的遍历需求。
104 6
|
2月前
|
JavaScript 算法 前端开发
深入剖析Vue中v-for的使用及index作为key的弊端
深入剖析Vue中v-for的使用及index作为key的弊端
36 2
|
2月前
|
JavaScript 算法 前端开发
在Vue开发中v-if指令和v-show指令的使用介绍,v-if和v-for的优先级以及使用注意事项的介绍
在Vue开发中v-if指令和v-show指令的使用介绍,v-if和v-for的优先级以及使用注意事项的介绍
23 0
|
JavaScript
vue 踩坑 01 ->两种创建vue实例的区别
第一个例子 {{msg}} var app = new Vue({ el: '#app', data: { m...
977 0
|
23天前
|
JavaScript API 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
24天前
|
JavaScript 前端开发 开发者
vue 数据驱动视图
总之,Vue 数据驱动视图是一种先进的理念和技术,它为前端开发带来了巨大的便利和优势。通过理解和应用这一特性,开发者能够构建出更加动态、高效、用户体验良好的前端应用。在不断发展的前端领域中,数据驱动视图将继续发挥重要作用,推动着应用界面的不断创新和进化。
|
26天前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱前端的大一学生,专注于JavaScript与Vue,正向全栈进发。博客分享Vue学习心得、命令式与声明式编程对比、列表展示及计数器案例等。关注我,持续更新中!🎉🎉🎉
31 1
vue学习第一章
|
26天前
|
JavaScript 前端开发 索引
vue学习第三章
欢迎来到瑞雨溪的博客,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中的v-bind指令,包括基本使用、动态绑定class及style等,希望能为你的前端学习之路提供帮助。持续关注,更多精彩内容即将呈现!🎉🎉🎉
24 1
vue学习第三章
|
26天前
|
缓存 JavaScript 前端开发
vue学习第四章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中计算属性的基本与复杂使用、setter/getter、与methods的对比及与侦听器的总结。如果你觉得有用,请关注我,将持续更新更多优质内容!🎉🎉🎉
35 1
vue学习第四章