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 相关文章推荐
使用滤镜设置透明导致 IE 6/7/8/9 解析异常的解决方法
Apr 07 Javascript
php对mongodb的扩展(小试牛刀)
Nov 11 Javascript
jquery做的一个简单的屏幕锁定提示框
Mar 26 Javascript
JavaScript事件委托的技术原理探讨示例
Apr 17 Javascript
JavaScript用JQuery呼叫Server端方法示例代码
Sep 03 Javascript
jquery操作select元素和option的实例代码
Feb 03 Javascript
微信小程序 input输入框详解及简单实例
Jan 10 Javascript
vue中当图片地址无效的时候,显示默认图片的方法
Sep 18 Javascript
三种Webpack打包方式(小结)
Sep 19 Javascript
javascript function(函数类型)使用与注意事项小结
Jun 10 Javascript
js贪心算法 钱币找零问题代码实例
Sep 11 Javascript
VSCode 添加自定义注释的方法(附带红色警戒经典注释风格)
Aug 27 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
怎样才能成为PHP高手?学会“懒惰”的编程
2006/12/05 PHP
php自定义的格式化时间示例代码
2013/12/05 PHP
php和editplus正则表达式去除空白行
2015/04/17 PHP
WordPress中缩略图的使用以及相关技巧
2015/11/24 PHP
JavaScript Date对象 日期获取函数
2010/12/19 Javascript
Extjs4 GridPanel的主要配置参数详细介绍
2013/04/18 Javascript
jquery cookie的用法总结
2013/11/18 Javascript
推荐9款炫酷的基于jquery的页面特效
2014/12/07 Javascript
深入分析jquery解析json数据
2014/12/09 Javascript
jquery中one()方法的用法实例
2015/01/16 Javascript
javascript函数特点实例分析
2015/05/14 Javascript
基于jQuery实现多层次的手风琴效果附源码
2015/09/21 Javascript
JavaScript驾驭网页-获取网页元素
2016/03/24 Javascript
js多功能分页组件layPage使用方法详解
2016/05/19 Javascript
JS实现图片剪裁并预览效果
2016/08/12 Javascript
Bootstrap源码解读标签、徽章、缩略图和警示框(8)
2016/12/26 Javascript
svg动画之动态描边效果
2017/02/22 Javascript
基于Vue自定义指令实现按钮级权限控制思路详解
2018/05/23 Javascript
详解如何快速配置webpack多入口脚手架
2018/12/28 Javascript
vue-router传参用法详解
2019/01/19 Javascript
详解mpvue中小程序自定义导航组件开发指南
2019/02/11 Javascript
NProgress显示顶部进度条效果及使用详解
2019/09/21 Javascript
js节流防抖应用场景,以及在vue中节流防抖的具体实现操作
2020/09/21 Javascript
python读取目录下最新的文件夹方法
2018/12/24 Python
python3.7 使用pymssql往sqlserver插入数据的方法
2019/07/08 Python
使用Python画出小人发射爱心的代码
2019/11/23 Python
PyTorch在Windows环境搭建的方法步骤
2020/05/12 Python
python删除指定列或多列单个或多个内容实例
2020/06/28 Python
Python pip安装第三方库实现过程解析
2020/07/09 Python
德国机场停车位比较和预订网站:Ich-parke-billiger
2018/01/08 全球购物
L’AGENCE官网:加州女装品牌
2018/06/03 全球购物
ruby如何进行集成操作?Ruby能进行多重继承吗?
2013/10/16 面试题
魅力教师事迹材料
2014/01/10 职场文书
护士长竞聘演讲稿
2014/04/30 职场文书
小石潭记导游词
2015/02/03 职场文书
Python实现简单得递归下降Parser
2022/05/02 Python