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

Vue3中如何结合v-for使用if条件仅展示progress为1的待办项

实现方案

你可以通过以下两种常见方式实现需求,优先推荐第二种性能更好:

方法1:模板中使用v-if条件过滤

在外层套一层<template>标签承载v-for逻辑,在实际渲染的div上添加v-if判断即可,修改后的模板代码如下:

<template v-for="(todo,index) in state.todos" :key="index">
  <div v-if="todo.progress === 1" class="border-dashed bg-white rounded-md shadow-md">
    <div class="justify-between flex">
      <div class="text-gray-600 p-4 font-medium"> {{todo.text}}
        <span class="text-gray-500 text-sm"> Small Details </span> 
        <span class="text-gray-500 text-sm"> Progress: {{todo.progress}} </span> 
      </div>
    </div>
  </div>
</template>

方法2:计算属性提前过滤(推荐)

该方式将过滤逻辑放到JS层处理,不用在模板渲染时逐次判断,性能更优,逻辑也更易维护。

第一步:修改JS代码引入computed并定义过滤方法

import axios from "axios";
import { defineComponent, reactive, computed } from 'vue' // 引入computed

export default defineComponent({
  setup() {
    const state=reactive({
      todos:[],
      todoText:"",
    });
    // 定义过滤后的待办列表计算属性
    const filteredTodos = computed(() => {
      return state.todos.filter(todo => todo.progress === 1)
    })
    function getTodos(){  
      axios.get('http://127.0.0.1:8000/api/todos')
      .then(response=>{
        state.todos=response.data;
      });
    } 
    getTodos();
    // 把计算属性return出去模板才能调用
    return {
      filteredTodos
    }
  }
})

第二步:修改模板循环过滤后的数组

直接循环过滤后的计算属性,不需要额外加v-if判断:

<div v-for="(todo,index) in filteredTodos" :key="index" class="border-dashed bg-white rounded-md shadow-md">
  <div class="justify-between flex">
    <div class="text-gray-600 p-4 font-medium"> {{todo.text}}
      <span class="text-gray-500 text-sm"> Small Details </span> 
      <span class="text-gray-500 text-sm"> Progress: {{todo.progress}} </span> 
    </div>
  </div>
</div>

可选优化:后端提前过滤

如果你的业务场景里前端完全不需要用到progress为0的待办项,可以直接在Laravel的接口查询逻辑中加where('progress', 1)条件,直接返回符合要求的数据,减少不必要的数据传输,性能更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:54:01