介绍一个新的API------computed()

本文介绍了如何在Vue应用中使用`ref`和`computed`创建动态计算属性,以根据`hideCompleted`和`todos`响应式数据源过滤待办事项。展示了如何在模板中绑定这些计算属性并实现增删操作以及过滤显示功能。
摘要由CSDN通过智能技术生成

它可以让我们创建一个计算属性 ref,这个 ref 会动态地根据其他响应式数据源来计算其 .value

import {ref,computed} from 'vue'
const hideComplete=ref(false)
const todos=ref([
{ id:id++,text:'learn html',done:false },
{ id:id++,text:'learn css',done:true },
{ id:id++,text:'learn vue',done:false }
])
const fiterTodos = computed(()=>{
// 根据 todos.value & hideCompleted.value
  // 返回过滤后的 todo 项目
}

下面是一个使用computed() API的例子:

<script setup>
import { ref, computed } from 'vue'

let id = 0

const newTodo = ref('')
const hideCompleted = ref(false)
const todos = ref([
  { id: id++, text: 'Learn HTML', done: true },
  { id: id++, text: 'Learn JavaScript', done: true },
  { id: id++, text: 'Learn Vue', done: false }
])

const filteredTodos = computed(() => {
  return hideCompleted.value //三元表达式
    ? todos.value.filter((t) => !t.done) //当(!t.done)为true的时候才会返回对应的todo
    : todos.value
})

function addTodo() {
  todos.value.push({ id: id++,text: newTodo.value, done: false }) //在源数组的基础上增加
  newTodo.value = ''
}

function removeTodo(todo) {
  todos.value = todos.value.filter((t) => t !== todo) //相当于function(t){return t!==todo}
}
</script>

<template>
  <form @submit.prevent="addTodo">
    <input v-model="newTodo">
    <button>Add Todo</button>
  </form>
  <ul>
    <li v-for="todo in filteredTodos" :key="todo.id">
      <input type="checkbox" v-model="todo.done"> <!--表单绑定,勾上复选框,对应的todo.done会变成true,不勾上就是false-->
      <span :class="{ done: todo.done }">{{ todo.text }}-{{todo.id}}</span>
      <!--这里的[done:todo.done}只有当todo.done为true的时候对应的css样式才会被渲染-->
      <button @click="removeTodo(todo)">delete</button>
    </li>
  </ul>
  <button @click="hideCompleted = !hideCompleted"> 
    <!--反复交换按钮的值-->
    {{ hideCompleted ? 'Show all' : 'Hide completed' }}
  </button>
</template>

<style>
.done {
  text-decoration: line-through; 
}
</style>

结果如图,当复选框被选中的时候css的才会被渲染,还可以隐藏已经选中的,或者展示全部的:

 

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值