vue:记事本
学了这么多,来写个简单的todo-list!
我们想要实现的功能是在输入框中输入你想做的事情后,按回车,然后这件事情就马上添加在了列表中,列表中的内容是在输入框的下面依次展示出来的。然后,在列表中添加的每一条信息都会有一个条目,表示这是添加的第几条信息。此外还会有一个删除按钮,表示如果我不想做这件事了,可以把它从列表中删除。其次,在列表的最下面,应该有一个计数器,表示到目前为止一共添加了几条数据进去。接着,如果列表中添加的这些事项我全部不想做,不可能还要一条一条删除,所以还得有一个清空按钮。最后,全部清除成功后,我还希望计数器和清空按钮消失,直到下一次添加新增内容后才会出现。
目前为止功能就这么多,我们先来看看怎么添加:
首先,因为用户是可以不停地向列表中添加事项的,因此不可能把这部分的html代码写死,所以我们要用到v-for来循环生成列表;其次,这里我们自然还需要一个v-model指令来实现双向数据绑定,这样一来,用户输入新的信息后,列表中就会有新增数据。这部分比较简单,实现起来就是:我们弄一个input标签,并使用keyup.enter绑定add函数,用来添加数据;新添加的内容我们在数据里面定义为inputValue,因此在html模板中,v-model="inputValue";最后,对于add函数的实现,我们仍然采用数组的方式完成。所以这部分只需要使用数组的push方法就可以了。
接着,为了在页面中显示出来,我们需要在模板中渲染出来,那自然是使用两个大括号来搞定,而且还要用到v-for指令,同事处理两个指令:item和index.index在前,item在中间。最后是一个删除按钮,显然,我们需要绑定一个函数,这个函数的实现,直接使用数组的splice方法就好了。splice函数的参数需要传递两个,第一个是指定要删除的编号,是从多少开始,第二个参数则表示要删除的个数。
最后,在记事本的最下面,还有一个计数器功能,我们直接把数组的长度拿过去渲染就好了。还有一个,就是需要在清除完毕后,这个显示“有几个事项”的条目需要消失,这个不管用v-if还是v-show实现都可以,条件就是数组长度不为0.另外还有一个全部清除按钮,通过绑定一个函数实现,函数的实现逻辑也很简单,直接把这个数组赋值为空。
来看看代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Vue</title> </head> <body> <section id="todoapp"> <header class="header"> <h1>记事本</h1> <input v-model="inputValue" @keyup.enter="add" autofocus="autofocus" autocomplete="off" placeholder="请输入任务" class="new-todo"> </header> <section class="main"> <ul class="todo-list"> <li class="todo" v-for="(item, index) in list"> <div class="view"> <span class="index">{{ index+1 }}</span> <label>{{ item }}</label> <button class="destroy" @click="remove(index)"></button> </div> </li> </ul> </section> <footer class="footer"> <span class="todo-count" v-if="list.length!=0"> <strong>{{ list.length }}</strong> items left </span> <button v-show="list.length!=0" class="clear-completed" @click="clear"> Clear </button> </footer> </section> <footer class="info"></footer> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script> var app = new Vue({ el:"#todoapp", data:{ list:["writing codes", "having meals", "taking naps"], inputValue:"good good study, day day up" }, methods:{ add:function () { this.list.push(this.inputValue); }, remove:function (index) { this.list.splice(index, 1); }, clear:function () { this.list = []; } } }) </script> </body> </html>
效果就不展示了,但是功能都可实现。

浙公网安备 33010602011771号