返回顶部
首页 > 资讯 > 精选 >Vue中如何实现列表渲染,排序,过滤操作
  • 455
分享到

Vue中如何实现列表渲染,排序,过滤操作

2023-06-29 07:06:50 455人浏览 安东尼
摘要

这篇文章主要为大家展示了“Vue中如何实现列表渲染,排序,过滤操作”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Vue中如何实现列表渲染,排序,过滤操作”这篇文章吧。1. 列表(渲染、排序、过滤

这篇文章主要为大家展示了“Vue中如何实现列表渲染,排序,过滤操作”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Vue中如何实现列表渲染,排序,过滤操作”这篇文章吧。

    1. 列表(渲染、排序、过滤)

    1.1 条件渲染指令

    有个小技巧:

     如果是查找对象中不存在的属性,返回的是一个undefined,利用这一个点不管是v-show或者是v-if,如果值等于undefined的就不显示,假设sex属性不存在

    <p v-show="student.sex">性别:{{student.sex}}</p>

    1.1.1 v-show

    v-show的原理:通过display:none 对元素进行隐藏,当满足条件时去除display:none这个样式

    适用的场景是:切换频率较高的场景

    在使用v-show隐藏元素的时候是可以获取得到元素的,而v-if 是无法获取到元素的

    1.1.2 v-if

    v-if的原理:将整个节点移除,满足条件时添加节点

    v-else、v-else-if 需要配合v-if去使用,但是结构不能被破坏

    必须要先写v-if,例如:

    v-if = "xxx"v-else = "xxx"---------------------v-if = "xxx"v-else-if = "xxx"v-else = "xxx"

    适用的场景:切换频率比较低的场景

    template

    最大的特点就是不破坏结构但是只能与 v-if 进行配合使用

    1.1.3 v-if和v-show的小案例
     <div id="root">        <h3>当前n的值为:{{n}}</h3>        <button @click="n++">点击我n加1</button>            <div class="box1" v-show = "true">你好啊!我是box1</div>             <div class="box1" v-show = "false">你好啊!我是box1</div>         <div class="box1" v-show="n === 1">你好啊!box1</div>                    <div class="box2" v-if = "true">我是box2</div>            <div class="box2" v-if = "false">我是box2</div>         <div class="box2" v-if="n === 2">我是box2</div>        <!--             3. v-else-if  , v-else , v-if 的区别            -  v-if必须先写,才能写v-else和v-else-if            -  例如:                v-if                v-if                v-if                这样是进行3次判断                -------------------------------                v-if                v-else-if                v-else-if                v-else                只要有一个判断为真,下面的语句就不执行                ----------------------------------                v-else                只要不满足v-if的条件就执行         -->         <div class="box3" v-if = "n===1">我是box31</div>           <div class="box3" v-else-if="n===1">我是box32</div>         <div class="box3" v-else-if = "n===3">我是box33</div>         <div class="box3" v-else>hhhhhhh</div>//当满足条件的时候只输出满足条件的值,例如本例子输出为 ‘我是box31'         <!--              需求:当n == 2时,在页面输出5句话             4. template                  - 最大的特点就是不破坏结构                - 但是只能和 v-if进行配合使用          -->          <template v-if="n === 2">              <h4>你好啊!</h4>              <h4>猜猜我是谁?</h4>              <h4>我是box4</h4>              <h4>你猜对了吗?</h4>              <h4>你真棒!</h4>          </template>    </div>    <script>        Vue.config.productionTip = false        let vm = new Vue({            el: '#root',            data: {                n: 0,            }        })    </script>
    1.1.4 v-for(key的原理)

    特点:

    可以遍历数组

    可以遍历对象

    可以遍历字符串

    可以遍历次数(用的很少)

    如果我们不写key,默认使用index

    作用:用于展示列表的数据

    语法v-for = "(item,index) in xxx" :key= "yyy"

    key的原理:(很重要)

    1.虚拟DOM中key的作用:

    key是虚拟DOM对象的标识,当数据发生变化时,Vue会根据【新数据】生成【新的虚拟DOM】, 随后Vue进行【新虚拟DOM】与【旧虚拟DOM】的差异比较,比较规则如下:

    (1). 旧虚拟DOM中找到了与新虚拟DOM相同的key

    ①若虚拟DOM中内容没变, 直接使用之前的真实DOM

    ②若虚拟DOM中内容变了, 则生成新的真实DOM,随后替换掉页面中之前的真实DOM

    (2). 旧虚拟DOM中未找到与新虚拟DOM相同的key直接创建新的真实DOM,随后渲染到到页面。

    如果使用index作为key会引发以下的问题:

    (1)如果发生逆序添加、逆序删除破坏了顺序操作就会产生没有必要的DOM更新而会造成达不到效果的问题

    (2)如果输入结构包括了输入类的DOM元素,会产生更新问题比如:input的框的数据对不上等等

    所以在开发的过程中key的使用最好是使用唯一能够标识的值作为key,比如id,Date.now(),nanoid这个包npm i nanoid等等

    Vue中如何实现列表渲染,排序,过滤操作

    Vue中如何实现列表渲染,排序,过滤操作

    1.2 列表过滤

    使用computed

     <div id="root">        <input type="text" placeholder="请输入关键字" v-model="keyWord">        <br>        <ul>            <li v-for="value in filtername" :key="value.id" >                {{value.name}} -- {{value.age}} -- {{value.gender}}            </li>        </ul>    </div>    <script>      Vue.config.productionTip = false        let vm = new Vue({            el: '#root',            data: {                arr: [                    { id: "001", name: "马冬梅", age: 18, gender: "female" },                    { id: "002", name: "周冬雨", age: 55, gender: "female" },                    { id: "003", name: "周杰伦", age: 30, gender: "male" },                    { id: "004", name: "郭艾伦", age: 30, gender: "male" },                    { id: "005", name: "郭德纲", age: 30, gender: "male" },                ],                keyword:""            },            computed:{                filtername:{                    get(){                        return this.arr.filter((currentval)=>{                            return currentval.name.indexOf(this.keyword) !== -1                        })                    }                }            }        })    </script>

    使用watch

    <div id="root">        <input type="text" placeholder="请输入关键字" v-model="keyword">        <br>        <ul>            <li v-for="value in filearr" :key="value.id" >                {{value.name}} -- {{value.age}} -- {{value.gender}}            </li>        </ul>    </div>    <script>                Vue.config.productionTip = false        let vm = new Vue({            el: '#root',            data: {                arr: [                    { id: "001", name: "马冬梅", age: 18, gender: "female" },                    { id: "002", name: "周冬雨", age: 55, gender: "female" },                    { id: "003", name: "周杰伦", age: 30, gender: "male" },                    { id: "004", name: "郭艾伦", age: 30, gender: "male" },                    { id: "005", name: "郭德纲", age: 30, gender: "male" },                ],                keyword:'',                filearr:[]            },                        // 先用watch写            watch:{                keyword:{                    immediate:true,                     handler(newval,oldval){                        this.filearr = this.arr.filter((currentval)=>{                            return currentval.name.indexOf(newval) !== -1                                                    })                    }                }            }        })    </script>

    1.3 列表排序

     <div id="root">        <h3>人员排序</h3>        <input type="text" placeholder="请输入关键字" v-model="keyword">        <button @click="type = 2">年龄升序</button>        <button @click="type = 1">年龄降序</button>        <button @click="type = 0">原顺序</button>        <ul>            <li v-for="val in filtername" :key="val.id">                {{val.name}} -- {{val.age}} -- {{val.gender}}             </li>        </ul>    </div>    <script>        Vue.config.productionTip = false        let vm = new Vue({            el: '#root',            data: {                arr: [                    { id: "001", name: "马冬梅", age: 18, gender: "female" },                    { id: "002", name: "周冬雨", age: 55, gender: "female" },                    { id: "003", name: "周杰伦", age: 50, gender: "male" },                    { id: "004", name: "郭艾伦", age: 59, gender: "male" },                    { id: "005", name: "郭德纲", age: 30, gender: "male" },                ],                keyword:"",                type:0            },            computed:{                filtername:{                    get(){                        let arr = this.arr.filter((current)=>{                            return current.name.indexOf(this.keyword) !== -1                        })                        arr.sort((a,b)=>{                                                        if(this.type)                            {                                return this.type == 1 ? b.age - a.age : a.age - b.age                             }                         })                        return arr                    }                }            }        })    </script>

    以上是“Vue中如何实现列表渲染,排序,过滤操作”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

    --结束END--

    本文标题: Vue中如何实现列表渲染,排序,过滤操作

    本文链接: https://lsjlt.com/news/323382.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • Vue中如何实现列表渲染,排序,过滤操作
      这篇文章主要为大家展示了“Vue中如何实现列表渲染,排序,过滤操作”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Vue中如何实现列表渲染,排序,过滤操作”这篇文章吧。1. 列表(渲染、排序、过滤...
      99+
      2023-06-29
    • Vue的列表之渲染,排序,过滤详解
      目录1. 列表(渲染、排序、过滤)1.1 条件渲染指令1.1.1 v-show1.1.2 v-if1.1.3 v-if和v-show的小案例1.1.4 v-for(key的原理)1....
      99+
      2024-04-02
    • Vue如何实现列表过滤与排序
      这篇文章主要讲解了“Vue如何实现列表过滤与排序”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue如何实现列表过滤与排序”吧!一、数据过滤watch实现<!DOCTYPE ...
      99+
      2023-06-30
    • Vue 列表过滤与排序的实现
      目录一、数据过滤watch实现computed 实现二、列表排序三、数据更新的一个问题四、Vue.set 方法五、Vue监视数据的原理六、综合练习一、数据过滤 watch实现 <...
      99+
      2024-04-02
    • Vue中怎么实现列表渲染
      这期内容当中小编将会给大家带来有关Vue中怎么实现列表渲染,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。<!DOCTYPE html> <ht...
      99+
      2024-04-02
    • 微信小程序如何实现列表渲染和条件渲染
      目录概述:循环渲染:渲染目标是列表时:渲染目标为字典时:总结概述: 要实现列表渲染我们首先要介绍一下< block标签. 该标签不会再列表中做任何渲染,一般当做容器使用. 我们...
      99+
      2024-04-02
    • SQL如何实现过滤排序
      这篇文章将为大家详细讲解有关SQL如何实现过滤排序,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 1、where  &n...
      99+
      2024-04-02
    • JavaScript如何过滤并排序字符串列表
      小编给大家分享一下JavaScript如何过滤并排序字符串列表,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!过滤并排序字符串列表...
      99+
      2024-04-02
    • vue中如何实现SSR服务端渲染
      本篇内容主要讲解“vue中如何实现SSR服务端渲染”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue中如何实现SSR服务端渲染”吧!一、SSR是什么Server-Side Rendering ...
      99+
      2023-06-29
    • Vue如何实现数组更新及过滤排序功能
      这篇文章给大家分享的是有关Vue如何实现数组更新及过滤排序功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。变异方法  Vue 包含一组观察数组的变异方法,它们将会触发视图更新,...
      99+
      2024-04-02
    • react如何实现列表排序
      今天小编给大家分享一下react如何实现列表排序的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。react实现列表排序的方法:...
      99+
      2023-07-04
    • Python如何实现过滤掉列表中唯一值
      小编给大家分享一下Python如何实现过滤掉列表中唯一值,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1、filter_uniquefrom colle...
      99+
      2023-06-25
    • C# SortedList排序列表如何实现
      这篇文章主要讲解了“C# SortedList排序列表如何实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C# SortedList排序列表如何实现”吧!在 C# 中,...
      99+
      2023-07-05
    • Vue项目中如何实现服务器端渲染
      本篇内容介绍了“Vue项目中如何实现服务器端渲染”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!vue-ssr在项目中的实践写在文前由于前端脚...
      99+
      2023-06-04
    • 微信小程序实战中位置闹铃如何利用条件渲染实现列表控件
      微信小程序实战中位置闹铃如何利用条件渲染实现列表控件,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。需求在视频第32秒左右,有一个选择编辑对象的画面,它的功能是一个列表控件。...
      99+
      2023-06-19
    • Vue中render如何实现渲染时间戳转时间以及渲染进度条效果
      这篇文章给大家分享的是有关Vue中render如何实现渲染时间戳转时间以及渲染进度条效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一.格式化时间效果图:实现上述界面代码如下:...
      99+
      2024-04-02
    • Vue中使用elementui与Sortable.js实现列表拖动排序
      本文实例为大家分享了使用elementui与Sortable.js实现列表拖动排序的具体代码,供大家参考,具体内容如下 一、安装使用Sortable.js 1、安装 cnpm ins...
      99+
      2024-04-02
    • Vue中如何实现img的src是动态渲染时不显示
      这篇文章主要介绍了Vue中如何实现img的src是动态渲染时不显示,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。今天在项目中遇到一个需求,设...
      99+
      2024-04-02
    • MySQL单表查询操作实例详解【语法、约束、分组、聚合、过滤、排序等】
      本文实例讲述了MySQL单表查询操作。分享给大家供大家参考,具体如下: 语法 一、单表查询的语法    SELECT 字段1,字段2... FROM 表名  &nbs...
      99+
      2024-04-02
    • Vue如何实现列表上下过渡效果
      这篇文章主要介绍Vue如何实现列表上下过渡效果,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!最终效果某列的数据由 X 位置上升到 Y 位置的过渡效果技术点 visibility: h...
      99+
      2024-04-02
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作