vue——制作简易版to do list

To do list

自己每天都在用to do list,但是总感觉所有的to do list软件都没有我想象的那么好用,于是突发奇想,想自己做一个全栈的 To do list出来
预计使用node.js 、MongoDB 、vue 、H5相关技术,预计开发工具为hbuilderx

下面是demo的效果图(自我感觉很丑)和相关代码:

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>to do list</title>
    <style>
        ……(css代码相信应该都会写)
    </style>
</head>

<body>
    <div id="app">
        <div class="wrapper">
            <p>
                <div class="add">
                    <input type="text" v-model="msg">
                    <span class="addBtn" @click="handleAdd(msg)" v-if="msg !== ''">添加待办</span>
                    <!-- 这里是如果没有输入内容,则禁止创建待办 -->
                    <span class="noaddBtn" v-else>添加待办</span>
                </div>
            </p>
            <div class="incomplete">
                <div>
                    待完成:
                </div>
                <wy-todolist>
                    <li v-for="item,index in incomplete">
                        <span class="del" @click="del(item,index)">删除</span><span class="content"><input type="checkbox" :checked="item.flag" @click="toggle(item,index)">{{item.msg}}</span></li>
                </wy-todolist>
            </div>
            <div class="complete">
                <div>已完成:</div>
                <ul>
                    <wy-donelist>
                        <li v-for="item,index in complete">
                            <span class="content"><input type="checkbox" :checked="item.flag" @click="toggleCancel(item,index)"> {{item.msg}}</span>
                        </li>
                    </wy-donelist>
                </ul>

            </div>
        </div>

    </div>
    <script src="https://unpkg.com/vue/dist/vue.min.js"></script>
    <script>
        Vue.component('wy-todolist', {
        //最开始写template的时候写的是<li><slot></slot></li>,在上面又循环生成li,把自己气哭了
            template: `<ul>
                            <slot></slot>//加上插槽,组件内部才可以写html、文字等相关内容
                        </ul>`,
            data: function() {
                return {}
            },
            methods: {

            }
        });
        Vue.component('wy-donelist', {
            template: `<ul>
                            <slot></slot>
                        </ul>`,
            data: function() {//注意这里的data是函数哈,不然会报错
                return {

                }
            },
        });
        var app = new Vue({
            el: '#app',
            data: function() {
                return {
                    flag: false,
                    msg: '',
                    //未完成列表
                    incomplete: [],
                    //未完成列表的大小
                    inCount: 0,
                    //完成列表
                    complete: [],
                    //完成列表大小
                    comCount: 0
                }
            },
            methods: {
                handleAdd: function(obj) {
                    this.inCount++;
                    let temp = {};
                    temp.msg = obj;
                    temp.flag = this.flag;
                    this.incomplete.unshift(temp);
                    this.msg = '';
                    console.log(this.incomplete);
                },
                toggle: function(obj, index) {
                    //切换是否选中
                    obj.flag = !obj.flag;
                    //在待办数组中移除
                    let temp = this.incomplete.splice(index, 1);//得到的temp是数组
                    //传递数据和状态
                    this.complete.unshift(...temp);//使用拓展运算符,将数组中的对象转换出来
                },
                toggleCancel: function(obj, index) {
                    //切换是否选中
                    obj.flag = !obj.flag;
                    //在待办数组中移除
                    let temp = this.complete.splice(index, 1);
                    //传递数据和状态
                    this.incomplete.unshift(...temp);
                },
                del: function(obj, index) {
                    this.incomplete.splice(index, 1);
                }
            }
        })
    </script>
</body>

</html>

这里我使用了两个组件,本来是想用利用这两个组件的共同的父组件进行兄弟组件之间的传值的,但是我发现使用slot插槽直接操作父组件的数据,这样更加方便(我不知道这样的是不是不太适合,但是确实比较方便,因为只有两个组件,使用vuex既浪费又繁琐)

朋友们,等我出全栈to do list的那天(虽然很简单)!!!冲冲冲!!!

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

summer·

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值