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>

 

效果就不展示了,但是功能都可实现。

 

posted @ 2022-02-15 10:47  EvanTheBoy  阅读(227)  评论(0)    收藏  举报