【IMWeb训练营作业】Todo-list

todolist的效果图
这里写图片描述

js代码

// localStorage存储
var todostorage = {
    fetch () {
        return JSON.parse(localStorage.getItem('vue-mvc') || '[]')
    },
    save (todos) {
         localStorage.setItem('vue-mvc',JSON.stringify(todos))
    }
};

// 根据hash变化更新todos
var filters = {
    all (todos) {
        return todos;
    },
    active (todos) {
        return todos.filter(function(todo){
            return !todo.completed
        })
    },
    completed(todos) {
        return todos.filter(function(todo){
            return todo.completed
        })
    }
}
// 监听hash变化
window.addEventListener('hashchange',function(){
    var hash = window.location.hash.slice(1);
    app.visibility = hash;
})

var app = new Vue({
    el: ".main",
    data: {
        todos: todostorage.fetch(),
        newTodo:'',
        editedTodo: null,
        visibility: 'all'
    },
    watch: {
        todos: {
            deep: true,
            handler: todostorage.save
        }
    },
    computed: {
        filtersTodo(){
            return filters[this.visibility]? filters[this.visibility](this.todos) : this.todos
        },
        remainingTodos(){
            return filters['active'](this.todos).length;
        }
    },
    methods: {
        addTodo () {
            var value = this.newTodo && this.newTodo.trim();
            if(!value){
                return
            }
            this.todos.push({
                title: value,
                completed: false
            });
            this.newTodo = ""
        },
        removeTodo (todo) {
            var index = this.todos.indexOf(todo);
            this.todos.splice(index,1)
        },
        editTodo (todo) {
            this.todoBefore  = todo.title;
            this.editedTodo = todo;
        },
        doneEdit (todo) {
            this.editedTodo = null;
            todo.title = todo.title.trim();
            if(!todo.title){
                this.removeTodo(todo)
            }
        },
        cancelEdit (todo){
            this.editedTodo = null;
            todo.title = this.todoBefore;
        }
    },
    directives: {
        'todo-focus': function(el,binding){
            if(binding.value){
                el.focus();
            }
        }
    }
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值