【IMWeb训练营作业】vue-Todolist

这几天学习了一下如何用vue完成todolist的小demo,自己也完成了一个如下
这里写图片描述
主要有以下功能:

  • 1.添加计划
  • 2.删除计划
  • 3.显示为完成计划
  • 4.编辑计划
  • 5.本地存储计划
  • 6.hash渲染列表

一、首相布局我在这里就不介绍布局了,直接奉上vue代码:

var store={
    save(key,value){
        localStorage.setItem(key,JSON.stringify(value))
    },
    fetch(key){
        return JSON.parse(localStorage.getItem(key)) || [];

    }
}
//取出所有值
var list =store.fetch("wo-de");

var vm=new Vue({
    el: ".main",
    data: {
        list: list,
        todo: "",
        edtorTodos: '',  //记录正在编辑的数据
        beforeTitle: '' ,//记录正在编辑的数据的title
        visibility:"all"
    },
    watch:{
        // list:function () {     //监控list这个属性,当这个属性对应的值发生变化就会执行函数
        //   store.save("wo-de",this.list);
        // }
        list:{
            handler:function(){
                store.save("wo-de",this.list);
            },
            deep:true
        }
    },
    computed: {
        noCheckeLength: function () {
            return this.list.filter(function (item) {
                return !item.isChecked
            }).length
        },
        filteredList:function(){
            //3种情况
            var filter= {
                all: function (list) {
                    return list;

                },
                finished: function (list) {
                    return list.filter(function(item){
                        return item.isChecked;
                    })
                },
                unfinished:function(list) {
                    return list.filter(function(item){
                        return !item.isChecked;
                    })
                }
            }
            return filter[this.visibility](list);
        }
    },
    methods: {
        addTodo(){  //添加任务
            this.list.push({
                title: this.todo,
                isChecked: false
            });
            this.todo = '';
        },
        deleteTodo(n){ //删除任务
            var index = this.list.indexOf(n);
            this.list.splice(index, 1);
        },
        edtorTodo(todo){  //编辑任务
            console.log(todo);
            //编辑任务的时候,记录一下编辑这条任务的title,方便在取消编辑的时候重新给之前的title
            this.beforeTitle = todo.title;

            this.edtorTodos = todo;


        },
        edtorTodoed(todo){ //编辑任务成功
            this.edtorTodos = '';
        },
        cancelTodo(todo){  //取消编辑任务

            todo.title = this.beforeTitle;

            this.beforeTitle = '';

            //让div显示出来,input隐藏
            this.edtorTodos = '';
        }
    },
    directives: {
        "foucs": {
            update(el, binding){
                if (binding.value) {
                    el.focus();
                }
            }
        }
    }
});
function watchHashChaange(){
    var hash=window.location.hash.slice(1);
    vm.visibility=hash;
}
watchHashChaange();
window.addEventListener("hashchange",watchHashChaange);

二、怎么添加删除计划,计算未成计划
这里写图片描述
这里写图片描述

addTodo(){  //添加任务
            this.list.push({
                title: this.todo,
                isChecked: false
            });
            this.todo = '';
        },
        deleteTodo(n){ //删除任务
            var index = this.list.indexOf(n);
            this.list.splice(index, 1);
        },

以上是添加任务删除的函数

computed: {
        noCheckeLength: function () {
            return this.list.filter(function (item) {
                return !item.isChecked
            }).length
        },

以上是自定义计算属性,来返回没有被勾选的计划依旧是未完成计划

三、如何编辑计划
这里写图片描述
功能代码如下

edtorTodo(todo){  //编辑任务
            console.log(todo);
            //编辑任务的时候,记录一下编辑这条任务的title,方便在取消编辑的时候重新给之前的title
            this.beforeTitle = todo.title;

            this.edtorTodos = todo;


        },
        edtorTodoed(todo){ //编辑任务成功
            this.edtorTodos = '';
        },
        cancelTodo(todo){  //取消编辑任务

            todo.title = this.beforeTitle;

            this.beforeTitle = '';

            //让div显示出来,input隐藏
            this.edtorTodos = '';
        }
    },

四、记下来是如何保存我的计划,为了防止刷新网页时列表消失

var store={
    save(key,value){
        localStorage.setItem(key,JSON.stringify(value))
    },
    fetch(key){
        return JSON.parse(localStorage.getItem(key)) || [];

    }
}
//取出所有值
var list =store.fetch("wo-de");

除了要这样创建list,还要使用watch监听他

 watch:{
        // list:function () {     //监控list这个属性,当这个属性对应的值发生变化就会执行函数
        //   store.save("wo-de",this.list);
        // }
        list:{
            handler:function(){
                store.save("wo-de",this.list);
            },
            deep:true
        }
    },

五、使用hash进行宣言
点击所有任务时:
这里写图片描述
点击未完成任务时
这里写图片描述
点击完成任务时
这里写图片描述

function watchHashChaange(){
    var hash=window.location.hash.slice(1);
    vm.visibility=hash;
}
watchHashChaange();
window.addEventListener("hashchange",watchHashChaange);
 computed: {
        noCheckeLength: function () {
            return this.list.filter(function (item) {
                return !item.isChecked
            }).length
        },
        filteredList:function(){
            //3种情况
            var filter= {
                all: function (list) {
                    return list;

                },
                finished: function (list) {
                    return list.filter(function(item){
                        return item.isChecked;
                    })
                },
                unfinished:function(list) {
                    return list.filter(function(item){
                        return !item.isChecked;
                    })
                }
            }
            return filter[this.visibility](list);
        }
    },
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Node.js中,你可以使用内置的crypto模块来实现HMAC-SHA256算法。下面是一个示例代码: ```javascript const crypto = require('crypto'); const secret = 'Secret_Key'; const message = 'timestampGET/users/self/verify'; const hmac = crypto.createHmac('sha256', secret); hmac.update(message); const sign = hmac.digest('base64'); console.log(sign); ``` 在这个示例中,我们首先引入了crypto模块。然后,我们定义了密钥(secret)和要加密的消息(message)。接下来,我们使用createHmac方法创建了一个HMAC对象,并指定了算法为SHA256,并传入密钥。然后,我们使用update方法将消息传入HMAC对象进行更新。最后,我们使用digest方法以base64编码格式输出加密后的签名。 请注意,这个示例中的密钥和消息只是示意用法,你需要根据实际情况替换为你自己的密钥和消息。 #### 引用[.reference_title] - *1* [Typescript/Nodejs 使用HmacSHA256 & Base64对接口调用签名](https://blog.csdn.net/HumorChen99/article/details/117548951)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v4^insert_chatgpt"}} ] [.reference_item] - *2* [Hmac SHA256 加密在原生 Java 及 Node.js 的实现](https://blog.csdn.net/frgod/article/details/122025192)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v4^insert_chatgpt"}} ] [.reference_item] - *3* [腾讯IMWeb团队是如何使用 NodeJS 实现 JWT 原理](https://blog.csdn.net/lunahaijiao/article/details/109881868)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v4^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值