Vue Day1【综合案例】小黑记事本
功能总结:
① 列表渲染:v-for key 的设置 {{ }} 插值表达式
② 删除功能:v-on 调用传参 filter 过滤 覆盖修改原数组
③ 添加功能:v-model 绑定 unshift 修改原数组添加
④ 底部统计 和 清空
(1)数组.length累计长度
(2)覆盖数组清空列表
(3)v-show 控制隐藏
trim()方法用于移除字符串两端的空白字符(包括空格、制表符、换行符等),并返回一个新的字符串,而不会修改原始字符串。

<body>
<!-- 主体区域 -->
<section id="app">
<!-- 输入框 -->
<header class="header">
<h1>小黑记事本</h1>
<input v-model="todoName" placeholder="请输入任务" class="new-todo" />
<button @click="add" class="add">添加任务</button>
</header>
<!-- 列表区域 -->
<section class="main">
<ul class="todo-list">
<!-- 别忘了 :key -->
<li class="todo" v-for="(item,index) in list" :key="item.id">
<div class="view">
<span class="index">{{index+1}}.</span> <label>{{ item.name }}</label>
<button @click="del(item.id)" class="destroy"></button>
</div>
</li>
</ul>
</section>
<!-- 统计和清空 → 如果没有任务了,就隐藏底部 → v-show -->
<footer v-show="list.length>0" class="footer">
<!-- 统计 -->
<span class="todo-count">合 计:<strong> {{ list.length }} </strong></span>
<!-- 清空 -->
<button @click="list=[]" class="clear-completed">
清空任务
</button>
</footer>
</section>
<!-- 底部 -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
// 添加功能
// 1. 通过 v-model 绑定 输入框 → 实时获取表单元素的内容
// 2. 点击按钮,进行新增
const app = new Vue({
el: '#app',
data: {
// 这里加一个 todoName
todoName: '',
list: [
{ id: 1, name: '跑步一公里' },
{ id: 2, name: '跳绳半小时' },
{ id: 3, name: '游泳一小时' },
]
},
methods: {
del(id) {
// console.log(id) filter 保留所有不等于该 id 的项
this.list = this.list.filter(item => item.id !== id)
},
add() {
if (this.todoName.trim() === '') {
alert("您的输入为空")
return
}
this.list.unshift({
id: +new Date(),
name: this.todoName
})
// console.log(this.list)
this.todoName = ''
}
}
})
</script>
</body>

浙公网安备 33010602011771号