用vue写todolist单页应用

网上有很多关于vue的todolist小程序。大多是利用vue-cli脚手架工具开发的,这个官网的文档也不支持新手从单文件开始学习。所以用大家熟悉的开发方式写了这个todolist,希望和大家一起学习。

  1. vue是啥?
    Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的 渐进式框架。简单说是一个模板引擎,做过后端的应该很清楚,以前靠服务器端渲染的dom,放在浏览器端端渲染,vue拿到数据渲染成dom.当然vue不仅仅是用来干这个的,数据驱动,数据双向绑定,赋予了用户很好的体验,以及快速的开发,应用的项目的益于维护等。。
  2. 下面开始代码吧,提前引入vue.js,以及bootstrap。由于没采用vue单文件开发。所以只有一个html文件.
  3. 为了方便你可以使用cdn来引入你需要的文件。demo使用了localstorage来存放数据。所以你必须开启web端口来浏览。未了方便你可以使用webstorm来开发。否则你直接打开静态页是不能存取数据的。当然这些数据你可以换成从数据库来处理
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>vue版todolist</title>
    <link rel="stylesheet" href="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.css">
    <script src="src/vue.js"></script>
</head>
<style>
    .isFinish {
        background-color: #d58512 !important;
    }

    .itemcount {
        display: block;
        width: 20px;
        height: 20px;
        text-align: center;
        line-height: 20px;
        border-radius: 10px;
        float: left;
        background-color: #d9edf7;
    }
</style>
<body>
<div class="container text-center" id="app">

    <h2>{{title}}</h2>
    <div class="row">
        <div class="col-md-7">

                <div class="form-group">
                    <label for="toitem">添加任务事项</label>
                    <input class="form-control" type="text" id="toitem" v-model="newitem" @keyup.enter="addItem()">
                </div>
                <!--   <div class="form-group text-left">
                       <button class="btn btn-primary btn-sm">确认添加</button>
                   </div>-->
                <div class="list-group text-left form-group" style="margin-top: 2em;">
                    <a href="#" class="list-group-item active text-left">
                        任务清单:
                    </a>

                    <a href="#" v-for="item in items" class="list-group-item" v-on:click="toogleFinsih(item)">
                        <span class="itemcount">{{item.id}}</span>
                        {{item.lable}}
                        <span class="badge" v-bind:class="{isFinish:item.isFinish}"></span>
                    </a>

                </div>

        </div>
        <div class="col-md-5">
            <div class="panel panel-default">
                <div class="panel-heading">任务计划:</div>
                <div class="panel-body">
                    请在一周内完成这些计划!
                </div>
                <div class="panel-footer text-right">
                    <button class="btn btn-info btn-sm" @click="clearItem">清空任务计划</button>
                </div>
            </div>
        </div>
    </div>
</div>
<script>
    //该网站的localStorage的键值,用于存放数据
    var todoList = 'todolist';
    //对localStorage的封装
    var lsp = (function () {
        return ({
            add: function (dataval) {
                //添加数据,键为todolist
                localStorage.setItem(todoList, JSON.stringify(dataval));
            },
            get: function () {
                //读取键为todolist的数据
                return JSON.parse(localStorage.getItem(todoList));
            },
            remove: function () {
                //移除该站点下键为todolist的数据
                localStorage.removeItem(todoList);
            },
            clear: function () {
                //清空该站点下的所有localStorage的数据
                localStorage.clear();
            }
        });
    })();
    var app = new Vue({
        el: '#app',
        data: {
            title: '任务清单demo',
            items: lsp.get() || [],//读取数据。如果没有数据赋值为数组[]
            newitem: '' //要添加的数据
        },
        methods: {
            addItem: function () {
                var that = this;
                this.items.push({
                    id: that.items.length + 1,
                    lable: that.newitem,
                    isFinish: false
                });
                lsp.add(this.items);
                this.newitem = '';
            },
            toogleFinsih: function (item) {
                item.isFinish = !item.isFinish;
            },
            clearItem: function () {

                this.items = [];

            }
        }
    })
</script>
</body>

</html>
github:demo
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值