这是源代码(github):git@github.com:Hughendman/notebook.git
这是HTML代码:
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>NoteBook</title> <link rel="stylesheet" href="css/base.css"> <link rel="stylesheet" href="css/index.css"> <script src="js/angular.min.js"></script> </head> <body ng-app="Todos"> <section class="todoapp" ng-controller="TodosCtrl"> <header class="header"> <h1>NOTE</h1> <form ng-submit="add()"> <input class="new-todo" ng-model="todo" placeholdder="You need to do something!!" autofocus> </form> </header> <section class="main"> <input class="toggle-all" type="checkbox"> <label for="toggle-all">Mark all as complete</label> <ul class="todo-list"> <li ng-repeat="todo in todos" ng-class="{completed: todo.flag}"> <div class="view"> <input class="toggle" ng-click="toggle($index)" type="checkbox" ng-checked="todo.flag"> <label>{{todo.text}}</label> <button class="destroy" ng-click="delete($index)"></button> </div> <input class="edit" value="Create a TodoMVC template"> </li> </ul> </section> <footer class="footer"> <span class="todo-count"><strong>{{length}}</strong> item left</span> <button class="clear-completed" ng-click="clear()">Clear completed</button> </footer> </section> <script> var Todos = angular.module('Todos', []); Todos.controller('TodosCtrl', ['$scope', function ($scope) { // 声明一个数组,用来存储待办事项 $scope.todos = [ {text: '写日记', flag: true}, {text: '做饭', flag: false}, {text: '洗脸', flag: true}, {text: '刷牙', flag: true}, ]; $scope.add = function () { // 向数组中添加数据 $scope.todos.push({text: $scope.todo, flag: false}); // 清空表单 $scope.todo = ''; $scope.length=$scope.count(); }; // 切换事项状态(完成/未完成) $scope.toggle = function (index) { // 改变数组中某单元的flag属性 $scope.todos[index].flag = !$scope.todos[index].flag; $scope.length=$scope.count(); }; // 删除事项 $scope.delete = function(index) { // 将数组中某单元删除 $scope.todos.splice(index, 1); $scope.length=$scope.count(); }; $scope.clear = function (){ for (var i=0 ;i< $scope.todos.length ; i++){ if($scope.todos[i].flag==true){ $scope.delete(i); $scope.clear(); } } }; $scope.count=function(){ var count=0; for(var i=0;i<$scope.todos.length;i++){ if($scope.todos[i].flag==false){ count++; } } return count; } $scope.length=$scope.count(); }]); </script> </body> </html>
这是base.css文件(注意,请用less)
hr { margin: 20px 0; border: 0; border-top: 1px dashed #c5c5c5; border-bottom: 1px dashed #f7f7f7; } .learn a { font-weight: normal; text-decoration: none; color: #b83f45; } .learn a:hover { text-decoration: underline; color: #787e7e; } .learn h3, .learn h4, .learn h5 { margin: 10px 0; font-weight: 500; line-height: 1.2; color: #000; } .learn h3 { font-size: 24px; } .learn h4 { font-size: 18px; } .learn h5 { margin-bottom: 0; font-size: 14px; } .learn ul { padding: 0; margin: 0 0 30px 25px; } .learn li { line-height: 20px; } .learn p { font-size: 15px; font-weight: 300; line-height: 1.3; margin-top: 0; margin-bottom: 0; } #issue-count { display: none; } .quote { border: none; margin: 20px 0 60px 0; } .quote p { font-style: italic; } .quote p:before { content: '“'; font-size: 50px; opacity: .15; position: absolute; top: -20px; left: 3px; } .quote p:after { content: '”'; font-size: 50px; opacity: .15; position: absolute; bottom: -42px; right: 3px; } .quote footer { position: absolute; bottom: -40px; right: 0; } .quote footer img { border-radius: 3px; } .quote footer a { margin-left: 5px; vertical-align: middle; } .speech-bubble { position: relative; padding: 10px; background: rgba(0, 0, 0, .04); border-radius: 5px; } .speech-bubble:after { content: ''; position: absolute; top: 100%; right: 30px; border: 13px solid transparent; border-top-color: rgba(0, 0, 0, .04); } .learn-bar > .learn { position: absolute; 272px; top: 8px; left: -300px; padding: 10px; border-radius: 5px; background-color: rgba(255, 255, 255, .6); transition-property: left; transition-duration: 500ms; } @media (min- 899px) { .learn-bar { auto; padding-left: 300px; } .learn-bar > .learn { left: 8px; } }
最后别忘记引入angular.min.js文件,以及初始化样式的index.css文件(网上有很多)。