vue 列表过滤

用一个案例大致解释下:

这边要进行一个模糊查询

输入一个冬,则只显示上面俩个 

也就是说,把100条数据根据你的输入只显示出6条这就是一种过滤

要输入一个字时,下面就要发生改变所以就是一个v-model的双向绑定

用watch实现:

 这边使用了

indexOf()

不包含则返回-1包含则返回对应的索引值

filter过滤方法中,它是不会该变数组的,会新生成出一个数组,而这还没有对新生成的数组进行调用

 

原数据不能更改所以要定义一个filPersons

前面的插值对象也要换成filPersons属性

 

 

 

但是这样还是有问题由于filPersons的初始为空,.所以显示也为空

但是不影响搜索的功能

 当全部删除输入的信息

发现空字符串查找都能进行查找的到

 所以以为默认框为空字符串所以只需要进行对watch属性加上immediate:true

表示,一开始进行一次侦听

代码注释小技巧:加region 和endregion

 

用计算属性:computed实现

用计算属性

当第一次调用时,此时输入框为空,则keyword为空,则输入全部的数据

当输入框输入数据则keyword改变则再次触发计算属性.即计算属性的依赖属性改变则计算属性也进行再次调用,实现了模糊查询

 

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
假设我们有一个包含以下数据的列表: ```javascript [ { id: 1, name: 'John Doe', age: 25, city: 'New York' }, { id: 2, name: 'Jane Smith', age: 30, city: 'Los Angeles' }, { id: 3, name: 'Bob Johnson', age: 35, city: 'Chicago' }, { id: 4, name: 'Sarah Lee', age: 28, city: 'San Francisco' }, { id: 5, name: 'Tom Brown', age: 32, city: 'Boston' }, ] ``` 我们想要实现一个搜索功能,可以通过输入关键字来过滤列表。我们可以用Vue的计算属性来实现这个功能。 首先,在data中定义一个名为`searchText`的变量,用于保存用户输入的关键字。然后,在template中添加一个输入框和一个列表,用于展示过滤后的结果。 ```html <template> <div> <input type="text" v-model="searchText"> <ul> <li v-for="item in filteredList" :key="item.id">{{ item.name }} ({{ item.age }})</li> </ul> </div> </template> ``` 接下来,我们需要编写一个计算属性来实现列表过滤。我们将其命名为`filteredList`。在计算属性中,我们使用`filter`方法来过滤列表。对于每个列表项,我们检查其`name`或`city`属性是否包含用户输入的关键字。如果是,则将其添加到一个新的数组中,并返回该数组作为过滤后的列表。 ```javascript computed: { filteredList() { return this.list.filter(item => { return item.name.toLowerCase().includes(this.searchText.toLowerCase()) || item.city.toLowerCase().includes(this.searchText.toLowerCase()); }); } } ``` 完整代码如下: ```html <template> <div> <input type="text" v-model="searchText"> <ul> <li v-for="item in filteredList" :key="item.id">{{ item.name }} ({{ item.age }})</li> </ul> </div> </template> <script> export default { data() { return { searchText: '', list: [ { id: 1, name: 'John Doe', age: 25, city: 'New York' }, { id: 2, name: 'Jane Smith', age: 30, city: 'Los Angeles' }, { id: 3, name: 'Bob Johnson', age: 35, city: 'Chicago' }, { id: 4, name: 'Sarah Lee', age: 28, city: 'San Francisco' }, { id: 5, name: 'Tom Brown', age: 32, city: 'Boston' }, ] }; }, computed: { filteredList() { return this.list.filter(item => { return item.name.toLowerCase().includes(this.searchText.toLowerCase()) || item.city.toLowerCase().includes(this.searchText.toLowerCase()); }); } } } </script> ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值