Angular之toDoList的实现代码示例


Posted in Javascript onDecember 02, 2017

什么是todolist?

所谓的todolist就是把你所做的事情按顺序全部列出来,然后做完一件事,就在这一项之前打勾,此时状态就会变成已完成,todolist可以对所列的事情和已完成的事情删除和修改,当然已完成的事情就不能修改了。
当我们拿到一个todolist的时候,首先看到的是todolist的组成,是由一个文本框和,列表项构成,数据要通过控制器从文本框传送到列表项,然后在列表项展示出来。

话不多说,先上图;

Angular之toDoList的实现代码示例

功能:

首先,所有的数据都是存储在localStorage中的;其次,文本框中输入内容后,回车即可添加任务主题;可以按内容和添加时间来排序任务;可以筛选任务,分为未完成和已完成;可以一键删除所有任务;在任务清单前打勾,即表示为已完成;点击任务后面的x则会删除这一条任务;双击任务进入任务编辑模式;在大文本框中填写详细的任务计划;

(只能在全部任务列表中勾选该任务是否完成哦 0.0...)

直接上代码啦(注释应该写的很清楚哦)

<div class="container" ng-app="taskList">

        <div ng-controller="TaskController">

           <h1>My Task List</h1>

           <form ng-submit="addTask()">

              <input type="text" class="form-control" ng-model="taskText" autofocus="autofocus" required="required" placeholder="What needs to be done? Let's start with an Enter !" />

              <div class="checkbox" ng-show="hasTask()">

                <label>

                   <input type="checkbox" ng-model="isAllDone" ng-click="allDone()" /> 标记所有为以解决

                </label>

              </div>

           </form>

           <div class="btn-toolbar" ng-show="hasTask()">

              <div class="btn-group">

                <button type="button" class="btn btn-success" ng-click="predicate='text'; reverse=!reverse">内容</button>

                <button type="button" class="btn btn-success" ng-click="predicate='time'; reverse=!reverse">时间</button>

              </div>

              <div class="btn-group" role="group">

                <button type="button" class="btn btn-warning" ng-click="query.done=false">未完成</button>

                <button type="button" class="btn btn-warning" ng-click="query.done=true">已完成</button>

                <button type="button" class="btn btn-warning" ng-click="query.done=''">全部</button>

              </div>

              <div class="btn-group">

                <button type="button" class="btn btn-primary all">全部展开</button>

              </div>

              <div class="btn-group">

                <button type="button" class="btn btn-danger" ng-click="removeAll()">删除所有任务</button>

              </div>

           </div>

           <ul class="taskList">

              <li ng-repeat="task in taskList | filter:query | orderBy:predicate:reverse">

                <div class="checkbox">

                   <label>

                 <input type="checkbox" ng-model="task.done" ng-click="save()"><span class="text done-{{task.done}}">{{task.text}}</span>

               </label>

                   <button type="button" class="close" ng-click="removeTask(task)" data-dismiss="alert">×</button>

                   <span class="pull-right time">{{task.time}}</span>

                </div>

                <div class="taskText">

                   <form>

                      <textarea ng-model="task.desc" class="form-control desc" rows="4" cols="73" required="required"></textarea>

                      <button ng-click="addDesc(task)" class="btn btn-primary btn-sm submit" type="submit">submit</button>

                   </form>

                </div>

              </li>

           </ul>

           <div class="count">

              未完成:<span class="badge">{{count()}}</span>   已完成:<span class="badge">{{countDone()}}</span>   总数:<span class="badge">{{taskList.length}}</span>

           </div>

        </div>

      </div>

下面是js代码:

var app = angular.module('taskList',[]);

app.controller('TaskController',function($scope , dateFilter){

   //获取缓存中的taskList数据

   var tmp = localStorage.getItem('taskList');

   //转为json数据进行操作

   $scope.taskList = tmp ? angular.fromJson(tmp) : [];

   //新增任务

   $scope.addTask = function(){

      $scope.taskList.push({

        id : $scope.taskList.length + 1,

        text : $scope.taskText,

        done : false,

        time : getNowTime(),

        desc : ''

      });

      //此处用来清空文本框中的内容

      $scope.taskText = '';

      $scope.save();

   }

   //完善任务细则

   $scope.addDesc = function(task){

      $scope.save();

      alert('任务更新成功,请努力坚持哦  :)');

   }



   //还没解决 在未完成和已完成的列表中单击checkbox时,结果不会保存到缓存中去的情况



   //从缓存中删除任务

   $scope.removeTask = function(todo){

      $scope.taskList.splice($scope.taskList.indexOf(todo), 1);

      $scope.save();

   }

   //从缓存中删除所有任务

   $scope.removeAll = function(){

      $scope.taskList = [];

      localStorage.clear();

   }

   //新增任务后还要把任务存入缓存中

   $scope.save = function(){

      localStorage.setItem('taskList' , angular.toJson($scope.taskList));

   }

   //获取当前时间

   function getNowTime(){

      return dateFilter(new Date() , "yyyy-MM-dd HH:mm:ss");

   }

   $scope.hasTask = function(){

      return $scope.taskList.length > 0;

   }

   //标记为全部完成

   $scope.allDone = function(){

      angular.forEach($scope.taskList , function(task){

        task.done = $scope.isAllDone;

      });

      $scope.save();

   }

   //统计已完成的任务

   $scope.countDone = function(){

      var count = 0;

      angular.forEach($scope.taskList , function(task){

        count += task.done ? 1 : 0;

      });

      return count;

   }

   //统计未完成的任务

   $scope.count = function(){

      var count = 0;

      angular.forEach($scope.taskList , function(task){

        count += task.done ? 0 : 1;

      });

      return count;

   }

});

$(function(){

   //给未来元素加双击事件,双击任务显示或隐藏任务细节

   $(".taskList").delegate('li','dblclick',function(){

      $(this).find('.taskText').slideToggle();

   });

   //全部展开或全部收起

   $('.all').click(function(){

      var _this = $(this);

      if(_this.text() == '全部展开'){

        $('.taskText').slideDown();

        _this.text('全部收起');

      }else{

        $('.taskText').slideUp();

        _this.text('全部展开');

      }

   });

   //确认修改描述框后隐藏

   $('.taskList').delegate('.submit','click',function(){

      var _this = $(this);

      $(this).click(function(){

        _this.parents('.taskText').slideUp();

      });

   });

   //描述框获得焦点又失去焦点后会自动隐藏

   $('.taskList').delegate('.desc','focus',function(){

      var _this = $(this);

      _this.blur(function(){

        _this.parents('.taskText').slideUp();

      });

   });

});

到这就大功告成啦, 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
表单项的name命名为submit、reset引起的问题
Dec 22 Javascript
表格奇偶行设置不同颜色的核心JS代码
Dec 24 Javascript
详解JavaScript语法对{}处理的坑爹之处
Jun 05 Javascript
创建、调用JavaScript对象的方法集锦
Dec 24 Javascript
微信小程序 教程之注册页面
Oct 17 Javascript
jQuery实现滚动条滚动到子元素位置(方便定位)
Jan 08 Javascript
JS中Promise函数then的奥秘探究
Jul 30 Javascript
JavaScript中变量、指针和引用功能与操作示例
Aug 04 Javascript
深入理解移动前端开发之viewport
Oct 19 Javascript
微信小程序云开发之云函数详解
May 16 Javascript
javascript History对象原理解析
Feb 17 Javascript
JavaScript内置对象之Array的使用小结
May 12 Javascript
React Native 使用Fetch发送网络请求的示例代码
Dec 02 #Javascript
vue微信分享 vue实现当前页面分享其他页面
Dec 02 #Javascript
Vue按需加载的具体实现
Dec 02 #Javascript
使用Vue完成一个简单的todolist的方法
Dec 01 #Javascript
将jquery.qqFace.js表情转换成微信的字符码
Dec 01 #jQuery
如何让你的JS代码更好看易读
Dec 01 #Javascript
javascript中new Array()和var arr=[]用法区别
Dec 01 #Javascript
You might like
多文件上载系统完整版
2006/10/09 PHP
用PHP 快速生成 Flash 动画的方法
2007/03/06 PHP
基于PHP的简单采集数据入库程序
2014/07/30 PHP
PHP fastcgi模式上传大文件(大约有300多K)报错
2014/09/28 PHP
浅谈PHP检查数组中是否存在某个值 in_array 函数
2016/06/13 PHP
PHP判断json格式是否正确的实现代码
2017/09/20 PHP
Laravel 5.4因特殊字段太长导致migrations报错的解决
2017/10/22 PHP
Laravel 错误提示本地化的实现
2019/10/22 PHP
在 PHP 和 Laravel 中使用 Traits的方法
2019/11/13 PHP
this和执行上下文实现代码
2010/07/01 Javascript
JS实现标签页效果(配合css)
2013/04/03 Javascript
JQuery中关于jquery.js与jquery.min.js的比较探讨
2013/05/15 Javascript
JQuery实现鼠标滑过显示导航下拉列表
2013/09/12 Javascript
如何在指定的地方插入html内容和文本内容
2013/12/23 Javascript
javascript创建含数字字母的随机字符串方法总结
2016/08/01 Javascript
AngularJS基础 ng-model-options 指令简单示例
2016/08/02 Javascript
AngularJS通过$sce输出html的方法
2016/09/22 Javascript
jquery attr()设置和获取属性值实例教程
2016/09/25 Javascript
基于AngularJS前端云组件最佳实践
2016/10/20 Javascript
JS传参及动态修改页面布局
2017/04/13 Javascript
使用Vue-Router 2实现路由功能实例详解
2017/11/14 Javascript
node实现socket链接与GPRS进行通信的方法
2019/05/20 Javascript
js计算最大公约数和最小公倍数代码实例
2019/09/11 Javascript
javascript实现画板功能
2020/04/12 Javascript
vue路由跳转传递参数的方式总结
2020/05/10 Javascript
python实现文件分组复制到不同目录的例子
2014/06/04 Python
matplotlib绘图实例演示标记路径
2018/01/23 Python
美国Max仓库:Max Warehouse
2020/05/31 全球购物
2014年底工作总结
2014/12/15 职场文书
全国爱眼日活动总结
2015/02/27 职场文书
试用期辞职信范文
2015/03/02 职场文书
项目合作意向书
2015/05/08 职场文书
2016大一新生入学教育心得体会
2016/01/23 职场文书
拥有这5个特征人,“命”都不会太差
2019/08/16 职场文书
Python机器学习算法之决策树算法的实现与优缺点
2021/05/13 Python
使用php的mail()函数实现发送邮件功能
2021/06/03 PHP