资讯专栏INFORMATION COLUMN

vue的TodoMVC事例总结

CKJOKER / 1983人阅读

摘要:缩写为数据键盘事件添加事项指令指令监听事件。这块内容只会在指令的表达式返回值的时候被渲染。清空已办事项全选取消全选方法用于调用数组的每个元素,并将元素传递给回调函数。

gitHub地址:https://github.com/gaozhixiao...

功能拆分:

渲染数据

键盘事件:添加事项

鼠标点击事件:移除事项

显示未办事项数据

全部事项、未办事项、已办事项状态切换

清除全部完成事项

全选、取消全选

LocalStorage读取,保存事项数据

鼠标双击事件:双击修改数据

键盘事件:Enter键盘事件完成修改

键盘事件:Esc键盘事件取消修改

自定义事件

加载事件:获取焦点

失去焦点事件:保存事项

1 渲染数据

指令: v-for v-for指令基于一个数组来渲染一个列表。v-for 指令需要使用 item in items 形式的特殊语法,其中 items 是源数据数组,而 item 则是被迭代的数组元素的别名
指令: v-bind v-bind:class = {} 动态绑定class。缩写为:class

    
  • 数据:

        {
            id: 1,
            title: "todo1",
            selected: false
        }
    2 Enter键盘事件: 添加事项

    指令: v-on v-on指令监听 DOM 事件。缩写为@
    按键修饰符: .enter: enter按键按下时触发
    指令: v-model 双向数据绑定,它会根据控件类型自动选取正确的方法来更新元素

        
        
        add: function () {
            let todoLength = this.todoList.length;
            this.todoList.push({
                "id": todoLength + 1,
                "title": this.todoValue,
                "selected": false
            })
            this.todoValue = ""
        },
    3 鼠标点击事件:移除事项
        
        
        remove: function (index) {
            this.todoList.splice(index, 1);
        },
    4 显示未办事项数目
        // 未办事项
        unSeleted: function () {
            return this.todoList.filter((item, index, array) => {
                return !item.selected;
            })
        },
        
        
            {{ unSeleted.length }} item left
        
    5 全部事项、未办事项、已办事项状态切换

    Hash:hash是url的一部分,从#开始
    Array.filter: array.filter(function(currentValue,index,arr), thisValue) filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
    _.filter: _.filter(collection, [predicate=_.identity])。引自: lodash.js 参考地址:https://www.lodashjs.com/

        // 将状态栏设置成hash属性
        All
        
        // 默认状态为全部事项
        hashActive: "all"
        
        // 已办事项
        selelted: function () {
            return _.filter(this.todoList, function (item) {
                return item.selected;
            })
        },
        // 未办事项
        unSeleted: function () {
            return this.todoList.filter((item, index, array) => {
                return !item.selected;
            })
        },
        // 事项状态切换
        hashFilter: function () {
            if (this.hashActive === "all") {
                return this.todoList;
            } else if (this.hashActive === "active") {
                return this.unSeleted;
            } else if (this.hashActive === "completed"){
                return this.selelted;
            } else {
                return this.todoList;
            }
        }
        
        // 已办事项,未办事项返回值都是一个数组,故更新渲染数据
        
  • 6 清除全部完成事项

    指令:v-if: v-if 指令用于条件性地渲染一块内容。这块内容只会在指令的表达式返回 truthy 值的时候被渲染。

        
        
        // 清空已办事项
        clearCompleted: function () {
            this.todoList = this.unSeleted;
        },
    7 全选、取消全选

    Array.foreach: array.forEach(function(currentValue, index, arr), thisValue) forEach() 方法用于调用数组的每个元素,并将元素传递给回调函数。

        // 当事项未全部选择时-> 全选,反之,反选
        
        
        toggleAll: function () {
            let selectedAll = this.todoList.every(function (item, index, array) {
                return item.selected;
            })
        
            if (selectedAll) {
                this.todoList.forEach(item => {
                    item.selected = false;
                });
            } else {
                this.todoList.forEach(item => {
                    item.selected = true;
                });
            }
        },
    8 LocalStorage读取,保存事项数据

    localStorage.getItem: var aValue = localStorage.getItem(keyName); 从localStorage中读取数据
    localStorage.setItem: localStorage.setItem(keyName, keyValue); 写入到localStorage中

        // LocalStorage读取事项
        let todoList = localStorage.getItem("todoList");
        if (todoList) {
            todoList = JSON.parse(todoList)
        } else {
            todoList = [];
        }
        
        // 渲染数据修改为从localStorage中获取
        data: {
            todoList: todoList
        },
        
        // 保存事项到localStorage, 采用监听属性对象内部的改变
        watch: {
            todoList: {
                deep: true,
                handler: function () {
                    localStorage.setItem("todoList", JSON.stringify(this.todoList));
                }
            }
        },
    9 鼠标双击事件:双击修改数据
        // 双击事件
         
    
        // 双击后,修改框显示双击前的数据
        // 此处注意的是:绑定的是item数据,这样做可以任意修改该条数据
        
  • edit: function (item, el) { this.editValue = item; this.cancelValue = item.title; },
  • 10 键盘事件:Enter键盘事件完成修改
        
        
        // 当编辑的数据为空时,删除该条数据, 同时重置该属性
        editDone: function (item, index) {
            if (!item.title) {
                this.todoList.splice(index, 1)
            }
            this.editValue = ""
        },
    11 键盘事件:Esc键盘事件取消修改

    按键修饰符: .Esc: Esc按键按下时触发

        
        
        cancelDone: function (item, index) {
            item.title = this.cancelValue;
            this.editValue = "";
            this.cancelValue = "";
        }
    12 自定义事件

    自定义指令: directives

        // 当双击修改事项时,获取焦点
        
        
        todoFocus: function (el) {
            el.focus();
        }
    13 加载事件:获取焦点

    window.onload: 文档加载完成后执行

        // 程序加载,获取焦点
        function getFocus () {
            let newTodo = document.getElementsByClassName("new-todo")[0];
            newTodo.focus();
        }
        window.onload = getFocus;
        
        // 切换状态,获取焦点
        hashFilter: function () {
            getFocus();
            ...
        }
    14 失去焦点事件:保存事项
        

    文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

    转载请注明本文地址:https://www.ucloud.cn/yun/105708.html

    相关文章

    • Vue.js@2.6.10更新内置错误处机制,Fundebug同步支持相应错误监控

      摘要:摘要的错误监控插件同步支持异步错误监控。此次更新,我们对的监控插件做了相应的更新,来更好地支持使用框架开发的应用错误的监控。程序运行后,成功捕获该错误总结更新到,对错误处理提供了更加强大的支持。 摘要: Fundebug 的 JavaScript 错误监控插件同步支持 Vue.js 异步错误监控。 Vue.js 从诞生至今已经 5 年,尤大在今年 2 月份发布了重大更新,即Vue 2....

      DC_er 评论0 收藏0
    • Vue.js 一些资源索引

      摘要:是刚出来的一个轻型的框架借鉴了现有的各种框架官网作者个人网站挺漂亮的作者微博尤小右作者是员工目前已经在一些项目尝试按去年月已经开始了项目项目主页是今年月上线的作者记录了上线一周的情况文档主要是在官网上非常清晰目前还是比较简短的另 Vue.js 是刚出来的一个轻型的 MVVM 框架, 借鉴了现有的各种框架, 官网 http://vuejs.org/ Github https://gith...

      yacheng 评论0 收藏0
    • Vue官网todoMVC示例

      这个示例是模仿官网示例样式和功能用我自己的方式写的,基本上没有看官网的源码,只参考自定义指令。让我们一步步来探讨一下。官网demo 要实现的功能 单条添加todo 单条删除todo 双击编辑todo 单条todo已完成相应样式状态改变 全部todo是已完成相应样式状态改变 清除全部已完成todos 待办todos数量显示 所有todos,已完成todos,未完成todos筛选 showImg(...

      mgckid 评论0 收藏0
    • React+webpack+Antd从0到1开发一个todoMvc

      摘要:在装载组件之前调用会组件的构造函数。当实现子类的构造函数时,应该在任何其他语句之前调用设置初始状态绑定键盘回车事件,添加新任务修改状态值,每次修改以后,自动调用方法,再次渲染组件。可以通过直接安装到项目中,使用或进行引用。 首先我们看一下我们完成后的最终形态:TodoMvc: showImg(https://segmentfault.com/img/remote/14600000085...

      sanyang 评论0 收藏0
    • Vue_简单项目todolist

      摘要:强大的渐进式渲染引擎使得我们越来越不需要手动控制数据的变化,那么下面我们来看一看。上面所有的依赖在下面引入就可以了。 Vue强大的渐进式渲染引擎使得我们越来越不需要手动控制数据的变化,那么下面我们来看一看。如何用Vue写一个todolist。 开始 首先,创建一个文件夹,用命令行初始化npm init -y然后安装需要的插件npm i -S underscore vue todomvc...

      Richard_Gao 评论0 收藏0

    发表评论

    0条评论

    CKJOKER

    |高级讲师

    TA的文章

    阅读更多
    最新活动
    阅读需要支付1元查看
    <