Vue输入框模糊搜索的多种写法

(1)模板方案

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
</head>
<body>
    <!-- 输入框模糊搜索 -->
    <div id="box">
        <input type="text" v-model="mytext"/>
        <ul>
            <template v-for="item in dataList" :key="item">
                <li v-if="item.includes(mytext)">{{ item }}</li>
            </template>
        </ul>
    </div>
    <script>
        var obj = {
            data(){
                return {
                    mytext:'',
                    dataList:['aaa','abc','acb','add','abb','acc','bca','cca','bba','ccc','bbb'],
                }
            }
        }
        Vue.createApp(obj).mount('#box')
    </script>
</body>
</html>

(2)复制方案 (浪费内存不优雅)

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
</head>
<body>
    <!-- 输入框模糊搜索 -->
    <div id="box">
        <input type="text" v-model="mytext"/ @input="handleInput">
        <ul>
            <template v-for="item in dataList" :key="item">
                <!-- <li v-if="item.includes(mytext)">{{ item }}</li> -->
                 <li>{{item}}</li>
            </template>
        </ul>
    </div>
    <script>
        var obj = {
            data(){
                return {
                    mytext:'',
                    dataList:['aaa','abc','acb','add','abb','acc','bca','cca','bba','ccc','bbb'],
                    baklist:['aaa','abc','acb','add','abb','acc','bca','cca','bba','ccc','bbb'] // 复制data
                }
            },
            methods:{
                handleInput(){
                  this.dataList = this.baklist.filter(item=>item.includes(this.mytext))
                }
            }
        }
        Vue.createApp(obj).mount('#box')
    </script>
</body>
</html>

(3)函数表达式

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
</head>
<body>
    <!-- 输入框模糊搜索 -->
    <div id="box">
        <input type="text" v-model="mytext"/>
        <ul>
            <template v-for="item in test()" :key="item">
                <li>{{ item }}</li>
            </template>
        </ul>
    </div>
    <script>
        var obj = {
            data(){
                return {
                    mytext:'',
                    dataList:['aaa1','abc','acb','add','abb','acc','bca','cca','bba','ccc','bbb','aac','aab'],
                }
            },
            methods:{
                test(){
                    return this.dataList.filter(item=>item.includes(this.mytext))
                }
            }
        }
        Vue.createApp(obj).mount('#box')
    </script>
</body>
</html>

(4)watch监听

(5)计算属性

相关推荐
梦曦i6 小时前
@meng-xi/create-uni-app vs unibest:轻量脚手架与重型框架的定位之争
前端·uni-app
平头哥技术团队6 小时前
Day 10 | 工欲善其事:VS Code 配置与项目归档
android·开发语言·前端·javascript·html·交互
乌恩大侠6 小时前
GH200 新增 NVMe SSD 分区、格式化与挂载完整流程
运维·服务器·前端
yume_sibai7 小时前
Element Plus 数据展示组件完全指南(15个核心组件)
前端·javascript·vue.js
qiuhaipeng17 小时前
Claude code 升级后上下文长度变短问题
java·前端·数据库
zzz_23687 小时前
个人 AI 记忆如何跨工具复用:用 Markdown、索引和 Skill 搭一个可治理的记忆库
前端·人工智能·react.js·前端框架·agent·agent测评
剑之所向9 小时前
.NET 官方`System.Threading.Channels`
前端·javascript·数据库
计算机魔术师10 小时前
GPT-6 Astra幻觉砍到2%,却被一种老招数轻松绕过
前端
cjy00011110 小时前
2026AI 产品如何从一次性 Demo 变成可重复使用的业务工具?
前端·人工智能·fde
IT_陈寒10 小时前
React的状态更新坑得我差点加班到天亮
前端·人工智能·后端