You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue.js中过滤后的列表无法显示问题求助

解决Vue自定义过滤器在v-for中不生效的问题

嘿,我一眼就揪出问题所在啦!你用的是Vue 1.x时代的管道符(|)语法,给v-for的数据源加过滤器,但Vue 2及更高版本已经移除了这种用法——管道符现在只能用在插值表达式({{ }})里,不能直接处理v-for要遍历的数组,这就是过滤后列表没显示的核心原因。

下面给你两种靠谱的解决方案:

方案一:使用计算属性(推荐,性能更优)

计算属性会自动缓存结果,只有依赖的myList变化时才会重新计算,非常适合这种固定逻辑的过滤场景:

修改后的HTML代码

<div class="container">
  <ul>
    <li v-for="item in filteredList" :key="item.name">
      {{ item.name }}
    </li>
  </ul>
</div>

修改后的JS代码

new Vue({
  el: '.container',
  data: {
    message: 'Hello world',
    myList: [
      { name: 'item1', value: 1 },
      { name: 'item2', value: 2 },
      { name: 'item3', value: 3 }
    ]
  },
  computed: {
    filteredList() {
      // 把原来的过滤器逻辑移到这里
      return this.myList.filter(item => item.value >= 2);
    }
  }
});

方案二:使用方法(适合需要动态传参的场景)

如果之后需要根据不同条件动态调整过滤规则,用方法会更灵活:

修改后的HTML代码

<div class="container">
  <ul>
    <li v-for="item in filterMyList(myList)" :key="item.name">
      {{ item.name }}
    </li>
  </ul>
</div>

修改后的JS代码

new Vue({
  el: '.container',
  data: {
    message: 'Hello world',
    myList: [
      { name: 'item1', value: 1 },
      { name: 'item2', value: 2 },
      { name: 'item3', value: 3 }
    ]
  },
  methods: {
    filterMyList(list) {
      return list.filter(item => item.value >= 2);
    }
  }
});

另外提一句,Vue 2+里的v-for建议加上:key绑定,帮助Vue更高效地更新DOM,这也是官方推荐的最佳实践哦~

内容的提问来源于stack exchange,提问作者DunDev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:32:42