vue前端代码作业——待办事项

发布于:2025-04-01 ⋅ 阅读:(14) ⋅ 点赞:(0)

美化样式示意图:

后端IDEA代码示意图:

代码解释:

1. isAllChecked 计算属性的作用

isAllChecked 用于实现 “全选 / 全不选” 功能,它是一个 双向绑定 的计算属性(因为 v-model 需要同时支持读取和设置值):

  • get 方法:用于读取全选状态(判断是否所有任务都已完成)。
  • set 方法:用于设置全选状态(当用户勾选全选框时,批量更新所有任务的完成状态)。

2. 为什么必须同时有 get 和 set

  • 单向计算属性:如果计算属性只需要读取(例如单纯的统计值),可以只写 get(或直接写成函数形式)。
  • 双向绑定(v-model:当计算属性用于 v-model 时,必须同时提供 get 和 set,因为 v-model 需要:
    • 通过 get 获取当前值(决定复选框是否选中)。
    • 通过 set 设置新值(当用户修改复选框时,更新数据源)。

如果缺少 set 方法,会导致 v-model 报错,因为无法处理用户对复选框的修改操作。

3. 代码奇数偶数列的颜色逻辑

li:nth-child(even) 是 CSS 中一种伪类选择器,它的作用是 匹配父元素(这里是 ul)中第偶数个子元素(从 2 开始,即 2、4、6…)的 li 元素。以下是具体解释:
:nth-child(even) 的逻辑:
even 表示偶数,它会遍历父元素(ul)的所有子元素(li),为位置是偶数的 li 元素应用样式。例如,第一个 li 位置是 1(奇数),不匹配;第二个 li 位置是 2(偶数),匹配;第三个位置是 3(奇数),不匹配,以此类推。因此,只有双数位置的 li 会被选中并应用 background-color: lavender 样式,呈现出淡紫色背景。
与代码的关联:
你的代码通过 v-for 循环生成多个 li 元素,这些 li 作为 ul 的子元素,会按顺序排列。浏览器在渲染时会为每个 li 计算位置,li:nth-child(even) 就会精准匹配到双数位置的 li,从而只让双数的任务名称(列表项)显示颜色。
如果想让奇数位置的 li 也有样式(如区分奇偶行),可以补充 li:nth-child(odd) 选择器(odd 表示奇数),例如:

li:nth-child(even) {
 background-color: lavender; /* 偶数行背景色 */
 } 
li:nth-child(odd) {
 background-color: #f0f0f0; /* 奇数行背景色 */ 
}

4.“全部/已完成”与“清除已完成”的左右对齐格式:

  1. 给父容器添加 align-items: center 确保内容垂直居中对齐。
  2. 移除冗余的 padding-right: 60px,通过 justify-content: space-between 让两个子元素自动左右分布。

     3.添加 padding: 10px 0 增加上下内边距让布局更舒适。

<div style="display: flex; justify-content: space-between; align-items: center; padding: 10px 0;">
  <div>
    <input type="checkbox" v-model="isAllChecked" style="margin-right: 8px;">
    <span>已完成{{finishedNum}} /全部{{renwus.length}}</span>
  </div>
  <button @click="clearFinished" style="padding: 6px 12px; border: 1px solid #ddd; border-radius: 4px; background-color: #fff; cursor: pointer;">
    清除已完成
  </button>
</div>