首页 > 其他分享 >vue(vue.js)—列表过滤

vue(vue.js)—列表过滤

时间:2024-10-14 20:11:18浏览次数:8  
标签:vue name age list js sex 过滤 列表

原文链接:vue(vue.js)—列表过滤 – 每天进步一点点 (longkui.site)

 

列表过滤可以认为是模糊搜索。实现的下面的这种效果:

1.监视属性watch实现

参考代码如下:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>vue测试</title>
    <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>

</head>

<body>
    <div id="root">
        <input type="text" placeholder="请输入关键词" v-model="keyWord">
        <div>
            <li v-for="i in list2">
                {{i.name}} --{{i.sex}}--{{i.age}}
            </li>
        </div>

    </div>

    <script type="text/javascript">
        new Vue({
            el: '#root',

            data: {
                keyWord: "",
                list: [
                    { "name": "张三1", "sex": "男", "age": 12 },
                    { "name": "李四", "sex": "女", "age": 31 },
                    { "name": "张三2", "sex": "男", "age": 43 },
                    { "name": "王五", "sex": "男", "age": 13 },
                    { "name": "五六", "sex": "男", "age": 13 }
                ],
                list2: []  //用来筛选数据
            },
            //使用watch进行过滤
            watch: {
                keyWord: {
                    immediate: true,// 一开始执行进行空过滤
                    handler(val) {
                        this.list2 = this.list.filter((i) => {
                            console.log("keyword被修改", val)
                            return i.name.indexOf(val) != -1
                        })
                    }
                }
            }
        })
    </script>
</body>

</html>

需要注意的点:

1.尽量不要使用原数组进行过滤筛选,有可能你过滤筛选后赋值给原数组会导致原数组数据越来越少。

2.immediate:true是为了一开始加载就实行一次空筛选。

3.list是原数组,list2是筛选后数组。

2.用计算属性实现
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>vue测试</title>
    <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>

</head>

<body>
    <div id="root">
        <input type="text" placeholder="请输入关键词" v-model="keyWord">
        <div>
            <li v-for="i in list2">
                {{i.name}} --{{i.sex}}--{{i.age}}
            </li>
        </div>
    </div>

    <script type="text/javascript">
         new Vue({
            el: '#root',
            data: {
                keyWord: "",
                list: [
                    { "name": "张三1", "sex": "男", "age": 12 },
                    { "name": "李四", "sex": "女", "age": 31 },
                    { "name": "张三2", "sex": "男", "age": 43 },
                    { "name": "王五", "sex": "男", "age": 13 },
                    { "name": "五六", "sex": "男", "age": 13 }
                ],
            },
            //计算属性实现
            computed:{
                list2(){
                    return this.list.filter((i) => {
                            return i.name.indexOf(this.keyWord) != -1
                    })
                }

            }
        })
    </script>
</body>

</html>

很明显,计算属性的写法更加简洁,所以遇到这种情况一般使用计算属性来进行筛选。

标签:vue,name,age,list,js,sex,过滤,列表
From: https://www.cnblogs.com/longkui-site/p/18464927

相关文章

  • springboot基于java的居家养老通用平台(源码+java+vue+部署文档+讲解等)
    收藏关注不迷路!!......
  • Elementui树形列表控件tree-box
    效果图(在vue2项目开发中,实现了树形列表查看及筛选等交互,用清晰的层级结构展示信息) 开发步骤及代码,来喽!!无脑copy1、组件基本框架  DeviceTree 是基于 Vue.js 和 ElementUI 构建的树形组件。通过 el-tree 组件显示树状结构。组件的外部可通过传递 props 来控制......
  • 基于Java使用SpringBoot+Vue框架实现的前后端分离的美食分享平台
    ✌全网粉丝20W+,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌......
  • nbsaas vue3管理后台框架
    nbsaasvue3管理后台框架一、项目概述NbsaasAdminVue是一个基于Vue.js3.0构建的轻量级后台管理系统,结合了现代前端技术栈的最佳实践,旨在帮助开发者快速构建具有高可扩展性和良好用户体验的后台管理系统。该项目拥有简洁的UI设计,强大的功能模块,支持多种自定义配置,......
  • vue3中的defineProps,defineEmits,defineExpose的使用详解
    defineProps 和 defineEmits 都是只能在 <scriptsetup> 中使用的编译器宏。他们不需要导入,且会随着 <scriptsetup> 的处理过程一同被编译掉。defineProps 接收与 props 选项相同的值,defineEmits 接收与 emits 选项相同的值,它们具备完整的类型推断并且在scriptse......
  • vue3 antvX6的使用源码
    npminstall--save@antv/x6<template><divclass="dashboard-container"><p>选择节点</p><button@click="save">保存</button><divclass="antvBox"><divclass="m......
  • MacOS安装nvm管理NodeJs
    安装nvm%curl-o-https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.4/install.sh|bash安装完成验证%nvm--version0.40.0安装NodeJs%nvminstall14.21.3%nvminstall20查看安装的NodeJs%nvmls->v14.21.3v20.18.0切换NodeJs版本......
  • 基于nodejs+vue基于springboot的高校资源共享平台[开题+源码+程序+论文]计算机毕业设
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展和教育改革的不断深入,高校资源共享已成为提升教育质量、促进学术交流的重要途径。然而,传统的高校资源管理模式存在资源分散、利用率......
  • vue3 做个点击拖拽的的按钮
    //视图层<divclass="regularAI"ref="draggableDiv":style="{top:`${position.y}px`,left:`${position.x}px`}"> <span@mousedown="startDrag">{{isDragging?'拖拽中':'点击拖拽'}}</span&......
  • 基于nodejs+vue基于springboot的个人博客设计与实现[开题+源码+程序+论文]计算机毕业
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展和信息时代的到来,个人表达与分享的需求日益增长。博客作为一种重要的网络应用形式,为博主提供了展示自我、分享知识与见解的平台。......