Angular之toDoList的實(shí)現(xiàn)代碼示例
什么是todolist?
所謂的todolist就是把你所做的事情按順序全部列出來,然后做完一件事,就在這一項(xiàng)之前打勾,此時(shí)狀態(tài)就會(huì)變成已完成,todolist可以對(duì)所列的事情和已完成的事情刪除和修改,當(dāng)然已完成的事情就不能修改了。
當(dāng)我們拿到一個(gè)todolist的時(shí)候,首先看到的是todolist的組成,是由一個(gè)文本框和,列表項(xiàng)構(gòu)成,數(shù)據(jù)要通過控制器從文本框傳送到列表項(xiàng),然后在列表項(xiàng)展示出來。
話不多說,先上圖;

功能:
首先,所有的數(shù)據(jù)都是存儲(chǔ)在localStorage中的;其次,文本框中輸入內(nèi)容后,回車即可添加任務(wù)主題;可以按內(nèi)容和添加時(shí)間來排序任務(wù);可以篩選任務(wù),分為未完成和已完成;可以一鍵刪除所有任務(wù);在任務(wù)清單前打勾,即表示為已完成;點(diǎn)擊任務(wù)后面的x則會(huì)刪除這一條任務(wù);雙擊任務(wù)進(jìn)入任務(wù)編輯模式;在大文本框中填寫詳細(xì)的任務(wù)計(jì)劃;
(只能在全部任務(wù)列表中勾選該任務(wù)是否完成哦 0.0...)
直接上代碼啦(注釋應(yīng)該寫的很清楚哦)
<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()" /> 標(biāo)記所有為以解決
</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">內(nèi)容</button>
<button type="button" class="btn btn-success" ng-click="predicate='time'; reverse=!reverse">時(shí)間</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()">刪除所有任務(wù)</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> 總數(shù):<span class="badge">{{taskList.length}}</span>
</div>
</div>
</div>
下面是js代碼:
var app = angular.module('taskList',[]);
app.controller('TaskController',function($scope , dateFilter){
//獲取緩存中的taskList數(shù)據(jù)
var tmp = localStorage.getItem('taskList');
//轉(zhuǎn)為json數(shù)據(jù)進(jìn)行操作
$scope.taskList = tmp ? angular.fromJson(tmp) : [];
//新增任務(wù)
$scope.addTask = function(){
$scope.taskList.push({
id : $scope.taskList.length + 1,
text : $scope.taskText,
done : false,
time : getNowTime(),
desc : ''
});
//此處用來清空文本框中的內(nèi)容
$scope.taskText = '';
$scope.save();
}
//完善任務(wù)細(xì)則
$scope.addDesc = function(task){
$scope.save();
alert('任務(wù)更新成功,請努力堅(jiān)持哦 :)');
}
//還沒解決 在未完成和已完成的列表中單擊checkbox時(shí),結(jié)果不會(huì)保存到緩存中去的情況
//從緩存中刪除任務(wù)
$scope.removeTask = function(todo){
$scope.taskList.splice($scope.taskList.indexOf(todo), 1);
$scope.save();
}
//從緩存中刪除所有任務(wù)
$scope.removeAll = function(){
$scope.taskList = [];
localStorage.clear();
}
//新增任務(wù)后還要把任務(wù)存入緩存中
$scope.save = function(){
localStorage.setItem('taskList' , angular.toJson($scope.taskList));
}
//獲取當(dāng)前時(shí)間
function getNowTime(){
return dateFilter(new Date() , "yyyy-MM-dd HH:mm:ss");
}
$scope.hasTask = function(){
return $scope.taskList.length > 0;
}
//標(biāo)記為全部完成
$scope.allDone = function(){
angular.forEach($scope.taskList , function(task){
task.done = $scope.isAllDone;
});
$scope.save();
}
//統(tǒng)計(jì)已完成的任務(wù)
$scope.countDone = function(){
var count = 0;
angular.forEach($scope.taskList , function(task){
count += task.done ? 1 : 0;
});
return count;
}
//統(tǒng)計(jì)未完成的任務(wù)
$scope.count = function(){
var count = 0;
angular.forEach($scope.taskList , function(task){
count += task.done ? 0 : 1;
});
return count;
}
});
$(function(){
//給未來元素加雙擊事件,雙擊任務(wù)顯示或隱藏任務(wù)細(xì)節(jié)
$(".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('全部展開');
}
});
//確認(rèn)修改描述框后隱藏
$('.taskList').delegate('.submit','click',function(){
var _this = $(this);
$(this).click(function(){
_this.parents('.taskText').slideUp();
});
});
//描述框獲得焦點(diǎn)又失去焦點(diǎn)后會(huì)自動(dòng)隱藏
$('.taskList').delegate('.desc','focus',function(){
var _this = $(this);
_this.blur(function(){
_this.parents('.taskText').slideUp();
});
});
});
到這就大功告成啦, 以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 使用Vue完成一個(gè)簡單的todolist的方法
- 用React實(shí)現(xiàn)一個(gè)完整的TodoList的示例代碼
- vue.js todolist實(shí)現(xiàn)代碼
- vue實(shí)現(xiàn)留言板todolist功能
- 詳解Vue的computed(計(jì)算屬性)使用實(shí)例之TodoList
- vue.js實(shí)例todoList項(xiàng)目
- vue2的todolist入門小項(xiàng)目的詳細(xì)解析
- 基于vuejs實(shí)現(xiàn)一個(gè)todolist項(xiàng)目
- vue實(shí)現(xiàn)todolist單頁面應(yīng)用
- vue實(shí)現(xiàn)ToDoList簡單實(shí)例
相關(guān)文章
詳解AngularJS1.6版本中ui-router路由中/#!/的解決方法
本篇文章主要介紹了詳解AngularJS1.6版本中ui-router路由中/#!/的解決方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-05-05
angularjs http與后臺(tái)交互的實(shí)現(xiàn)示例
這篇文章主要介紹了angularjs http與后臺(tái)交互的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-12-12
AngularJs定時(shí)器$interval 和 $timeout詳解
這篇文章主要介紹了AngularJs定時(shí)器$interval 和 $timeout詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05
淺談angular.js中實(shí)現(xiàn)雙向綁定的方法$watch $digest $apply
Angular用戶都想知道數(shù)據(jù)綁定是怎么實(shí)現(xiàn)的。你可能會(huì)看到各種各樣的詞匯:$watch,$apply,$digest它們是如何工作的呢?這里我想回答這些問題,其實(shí)它們在官方的文檔里都已經(jīng)回答了,但是我還是想把它們結(jié)合在一起來講2015-10-10
詳解什么是@ngrx/store開發(fā)包中的MemoizedSelector
這篇文章主要為大家介紹了@ngrx/store開發(fā)包中的MemoizedSelector使用分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
AngularJS數(shù)據(jù)源的多種獲取方式匯總
在AngularJS中獲取數(shù)據(jù)源的方式有很多種,本文給大家整理幾種獲取數(shù)據(jù)源的方式,對(duì)angularjs獲取數(shù)據(jù)源的方式相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧2016-02-02

