Vue计算属性实现模糊查询

本文探讨了如何通过使用Vue的计算属性而非直接修改数据数组,实现在输入框内容变化时进行模糊查询并保持原始数据的独立性。通过计算属性实现缓存,避免了多次不必要的数组过滤操作,提高了代码的可维护性和性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是在本地实现一个模糊查询的例子,期初我定义了一个方法,来监测input值发生该改变时触发过滤符合条件的值。

html:
 

    <div id="app">
        <input type="text" @input="handleInput()" v-model="mytext">
        <ul v-for="(item,index) in arr">
            <li>{{item}}</li>
        </ul>
    </div>

js

<script>
    var vu = new Vue({
        el:"#app",
        data:{
            mytext:"",
            arr:[
                "南京市第一中学",
                "南京市第二中学",
                "南京市第三中学",
                "南京市外国语学校",
                "南京市栖霞高级中学"
            ],
            list:[
                "南京市第一中学",
                "南京市第二中学",
                "南京市第三中学",
                "南京市外国语学校",
                "南京市栖霞高级中学"
            ]
        },
        methods:{
            handleInput(){
                //利用输入值,过滤符合条件的元素
                //filter过滤数组
                var newList = this.list.filter(item=>item.indexOf(this.mytext) > -1)
                this.arr = newList;
            }
        }
    })
</script>

这样的方法会监测input值改变,调用handleInput过滤,但是会改变arr原始数组的值。不利于二次过滤,必须要使用变量来存储原始数组。而造成代码冗余。

计算属性可以基于响应式依赖进行缓存。在监测到input值发生改变时,相关响应式依赖发生改变重新求值。这就意味着只要 arr还没有发生改变,多次访问 handleinput 计算属性会立即返回之前的计算结果,而不必再次执行函数。

计算属性html:

    <div id="app">
        <input type="text" v-model="mytext">
        <ul v-for="(item,index) in handleInput">
            <li>{{item}}</li>
        </ul>
    </div>

js:

<script>
    var vu = new Vue({
        el:"#app",
        data:{
            mytext:"",
            arr:[
                "南京市第一中学",
                "南京市第二中学",
                "南京市第三中学",
                "南京市外国语学校",
                "南京市栖霞高级中学"
            ],
        },
        computed:{
            handleInput(){
                //利用输入值,过滤符合条件的元素
                //filter过滤数组
                var newList = this.list.filter(item=>item.indexOf(this.mytext) > -1)
                this.arr = newList;
            }
        }
    })
</script>



 

Vue 3中实现模糊查询通常涉及到在数据模型上使用JavaScript的数组方法和字符串方法。以下是一个基本的实现步骤: 1. 准备数据源:首先需要有一个数据源,比如一个数组,数组中包含多个对象,每个对象都包含一个或多个属性,你想要根据这些属性进行模糊查询。 2. 创建查询状态:在Vue组件的data函数中创建一个响应式属性,比如`searchQuery`,用来存放用户输入的查询关键词。 3. 监听用户输入:使用`v-model`或`watch`来监听用户在输入框中的输入变化,并将输入的值赋给`searchQuery`。 4. 实现过滤逻辑:使用`filter`方法来过滤数据。在`filter`方法中,你可以对每个对象进行遍历,并检查对象的特定属性是否包含`searchQuery`中的关键词。如果包含,那么这个对象就应该是查询结果的一部分。 5. 更新视图:在过滤后的数据上创建一个计算属性或方法,用来返回过滤后的结果。在模板中,使用这个计算属性或方法来更新视图。 下面是一个简单的代码示例: ```javascript <template> <input v-model="searchQuery" placeholder="输入关键词进行查询" /> <ul> <li v-for="item in filteredData" :key="item.id"> <!-- 这里展示item的其他属性 --> </li> </ul> </template> <script> import { ref } from 'vue'; export default { setup() { const data = ref([ // 假设这是从服务器获取的数据 { id: 1, name: '张三', age: 24 }, { id: 2, name: '李四', age: 34 }, // ...更多数据 ]); const searchQuery = ref(''); const filteredData = computed(() => { if (searchQuery.value.trim()) { return data.value.filter(item => { return Object.values(item) .join('') .toLowerCase() .includes(searchQuery.value.toLowerCase()); }); } return data.value; }); return { data, searchQuery, filteredData }; } }; </script> ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值