Forked from Katie Harron's Pen Simple ToDo app in Angularjs that saves to localstorage.
A Pen by Chris von Csefalvay on CodePen.
| <body data-ng-app=""> | |
| <div class="container" data-ng-controller="TodoController"> | |
| <header class="app-header"> | |
| <h1 class="app-title">{{ appTitle }}</h1> | |
| <h1 class="app-headline">{{ appHeadline }}</h1> | |
| </header> | |
| <section class="app-body"> | |
| <section class="archive-control"> | |
| <span>{{ remaining() }} of {{ todos.length }} remaining</span> | |
| <p>[ <a href="" data-ng-click="archive()">Remove Completed Items</a> ]</p> | |
| </section> | |
| <ul class="unstyled"> | |
| <li data-ng-repeat="todo in todos track by $index"> | |
| <input type="checkbox" data-ng-model="todo.done"> | |
| <span class="done-{{ todo.done }}">{{ todo.text }}</span> | |
| </li> | |
| </ul> | |
| <form data-ng-submit="addTodo()" class="todo-form"> | |
| <input type="text" data-ng-model="todoText" placeholder="Enter new ToDo item" /> | |
| <br /> | |
| <input type="submit" value="Add Task" /> | |
| </form> | |
| </section> | |
| </div> |
| function TodoController ($scope) { | |
| $scope.appTitle = "Katie's Awesome ToDo App"; | |
| $scope.appHeadline = "This one will save to local storage!"; | |
| $scope.saved = localStorage.getItem('todos'); | |
| $scope.todos = (localStorage.getItem('todos')!==null) ? JSON.parse($scope.saved) : [ {text: 'Learn AngularJS', done: false}, {text: 'Build an Angular app', done: false} ]; | |
| localStorage.setItem('todos', JSON.stringify($scope.todos)); | |
| $scope.addTodo = function() { | |
| $scope.todos.push({ | |
| text: $scope.todoText, | |
| done: false | |
| }); | |
| $scope.todoText = ''; //clear the input after adding | |
| localStorage.setItem('todos', JSON.stringify($scope.todos)); | |
| }; | |
| $scope.remaining = function() { | |
| var count = 0; | |
| angular.forEach($scope.todos, function(todo){ | |
| count+= todo.done ? 0 : 1; | |
| }); | |
| return count; | |
| }; | |
| $scope.archive = function() { | |
| var oldTodos = $scope.todos; | |
| $scope.todos = []; | |
| angular.forEach(oldTodos, function(todo){ | |
| if (!todo.done) | |
| $scope.todos.push(todo); | |
| }); | |
| localStorage.setItem('todos', JSON.stringify($scope.todos)); | |
| }; | |
| } |
| <script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.1/angular.min.js"></script> |
Forked from Katie Harron's Pen Simple ToDo app in Angularjs that saves to localstorage.
A Pen by Chris von Csefalvay on CodePen.
| body { | |
| font-family:Arial; | |
| } | |
| a{ | |
| text-decoration: none; | |
| font-weight: bold; | |
| color: rgb(145, 145, 145); | |
| } | |
| .container { | |
| width: 100%; | |
| max-width: 960px; | |
| margin: 0px auto; | |
| } | |
| .app-header { | |
| text-align: center; | |
| border-bottom: 1px solid rgba(0, 0, 0, 0.1); | |
| height: 40px; | |
| background: #336699; | |
| } | |
| .app-title { | |
| font-size: 28px; | |
| line-height: 40px; | |
| padding: 0px; | |
| margin: 0px; | |
| color: #fff; | |
| text-shadow: 1px 1px 3px #000000; | |
| filter: dropshadow(color=#000000, offx=1, offy=1); | |
| } | |
| .app-headline { | |
| color: #999; | |
| font-size: 15px; | |
| } | |
| .app-body { | |
| margin-top: 40px; | |
| } | |
| .done-true { | |
| text-decoration: line-through; | |
| color: grey; | |
| } | |
| .archive-control { | |
| border-bottom: 1px solid rgba(0, 0, 0, 0.1); | |
| height: 22px; | |
| line-height: 22px; | |
| padding: 5px 0px 5px 10px; | |
| margin-bottom: 50px; | |
| background: #ecf0f1; | |
| } | |
| ul { | |
| list-style: none; | |
| padding-left: 0; | |
| padding: 10px; | |
| } | |
| ul li { | |
| line-height: 32px; | |
| border-bottom: 1px solid rgba(0, 0, 0, 0.1); | |
| } | |
| .todo-form { | |
| padding: 10px; | |
| text-align: center; | |
| } | |
| input[type="text"] { | |
| border-bottom: 1px solid rgba(0, 0, 0, 0.3); | |
| border-top: 0px; | |
| border-right: 0px; | |
| border-left: 0px; | |
| height: 30px; | |
| width: 100%; | |
| max-width: 400px; | |
| } | |
| input[type="submit"] { | |
| height: 30px; | |
| text-align: center; | |
| margin: 10px; | |
| width: 120px; | |
| } |