Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >todomvc-app

todomvc-app

作者头像
半指温柔乐
发布于 2018-09-11 01:33:03
发布于 2018-09-11 01:33:03
57900
代码可运行
举报
文章被收录于专栏:前端知识分享前端知识分享
运行总次数:0
代码可运行

1、HTML

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 <!doctype html>
 2 <html lang="en">
 3     <head>
 4         <meta charset="utf-8">
 5         <meta name="viewport" content="width=device-width, initial-scale=1">
 6         <title>Template • TodoMVC</title>
 7         <link rel="stylesheet" href="node_modules/todomvc-app-css/index.css">
 8         <!-- CSS overrides - remove if you don't need it -->
 9         <link rel="stylesheet" href="css/app.css">
10     </head>
11     <body ng-app="MyTodoMvc">
12         <section class="todoapp" ng-controller="MainController">
13             <header class="header">
14                 <h1>todos</h1>
15                 <form ng-submit="add()">
16                     <input class="new-todo" placeholder="What needs to be done?" ng-model="text" autofocus>
17                 </form>
18             </header>
19             <section class="main">
20                 <input class="toggle-all" type="checkbox" ng-click="toggleAll()">
21                 <label for="toggle-all">Mark all as complete</label>
22                 <ul class="todo-list">
23                     <li ng-repeat="todo in todos | filter: selector : equalCompare" ng-class="{completed:todo.completed,editing:todo.id===currentEditingId}" data-id="{{todo.id}}">
24                         <div class="view">
25                             <input class="toggle" type="checkbox" ng-model="todo.completed">
26                             <label ng-dblclick="editing(todo.id)">{{todo.text}}</label>
27                             <button class="destroy" ng-click="remove(todo.id)"></button>
28                         </div>
29                         <form ng-submit="save()">
30                             <input class="edit" ng-model="todo.text" ng-blur="save()">
31                         </form>
32                     </li>
33                 </ul>
34             </section>
35             <!-- This footer should hidden by default and shown when there are todos -->
36             <footer class="footer">
37                 <!-- This should be `0 items left` by default -->
38                 <span class="todo-count"><strong>{{todos.length}}</strong> item left</span>
39                 <!-- Remove this if you don't implement routing -->
40                 <ul class="filters">
41                     <li>
42                         <a ng-class="{selected:$location.path() == '/'}" href="#/">All</a>
43                     </li>
44                     <li>
45                         <a ng-class="{selected:$location.path() == '/active'}" href="#/active">Active</a>
46                     </li>
47                     <li>
48                         <a ng-class="{selected:$location.path() == '/completed'}" href="#/completed">Completed</a>
49                     </li>
50                 </ul>
51                 <!-- Hidden if no completed items are left ↓ -->
52                 <button class="clear-completed" ng-click="clear()" ng-show="existCompleted()">Clear completed</button>
53             </footer>
54         </section>
55         <footer class="info">
56             <p>Double-click to edit a todo</p>
57             <!-- Remove the below line ↓ -->
58             <p>Template by <a href="http://sindresorhus.com">Sindre Sorhus</a></p>
59             <!-- Change this out with your name and url ↓ -->
60             <p>Created by <a href="http://todomvc.com">you</a></p>
61             <p>Part of <a href="http://todomvc.com">TodoMVC</a></p>
62         </footer>
63         <!-- Scripts here. Don't remove ↓ -->
64         <script src="node_modules/angular/angular.js"></script>
65         <script src="js/app.js"></script>
66     </body>
67 </html>

2、app.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  1 (function(angular) {
  2   'use strict';
  3 
  4 
  5   // 1. 为应用程序创建一个模块,用来管理界面的结构
  6   var myApp = angular.module('MyTodoMvc', []);
  7 
  8   // 2. 注册一个主要的控制器(属于某个模块),用于往视图(view)中暴露数据
  9   myApp.controller('MainController', ['$scope', '$location', function($scope, $location) {
 10     // [1,2,3,4,5]
 11     // 获取唯一ID
 12     function getId() {
 13       var id = Math.random(); // 1 2
 14       for (var i = 0; i < $scope.todos.length; i++) {
 15         if ($scope.todos[i].id === id) {
 16           id = getId();
 17           break;
 18         }
 19       }
 20       return id;
 21     }
 22 
 23     // 文本框需要一个模型,为了拿到文本输入的值
 24     $scope.text = '';
 25 
 26     // 任务列表也需要一个
 27     // 每一个任务的结构 { id: 1, text: '学习', completed: true }
 28     $scope.todos = [{
 29       id: 0.123,
 30       text: '学习',
 31       completed: false
 32     }, {
 33       id: 0.22,
 34       text: '睡觉',
 35       completed: false
 36     }, {
 37       id: 0.232,
 38       text: '打豆豆',
 39       completed: true
 40     }];
 41 
 42     // 添加todo
 43     $scope.add = function() {
 44       if (!$scope.text) {
 45         return;
 46       }
 47       $scope.todos.push({
 48         // 自动增长?
 49         id: getId(),
 50         // 由于$scope.text是双向绑定的,add同时肯定可以同他拿到界面上的输入
 51         text: $scope.text,
 52         completed: false
 53       });
 54       // 清空文本框
 55       $scope.text = '';
 56     };
 57 
 58 
 59     // 处理删除
 60     $scope.remove = function(id) {
 61       // 删除谁
 62       for (var i = 0; i < $scope.todos.length; i++) {
 63         if ($scope.todos[i].id === id) {
 64           $scope.todos.splice(i, 1);
 65           break;
 66         }
 67       }
 68       // $scope.todos
 69     };
 70 
 71     // 清空已完成
 72     $scope.clear = function() {
 73       var result = [];
 74       for (var i = 0; i < $scope.todos.length; i++) {
 75         if (!$scope.todos[i].completed) {
 76           result.push($scope.todos[i]);
 77         }
 78       }
 79       $scope.todos = result;
 80     };
 81 
 82     // 是否有已经完成的
 83     $scope.existCompleted = function() {
 84       // 该函数一定要有返回值
 85       for (var i = 0; i < $scope.todos.length; i++) {
 86         if ($scope.todos[i].completed) {
 87           return true;
 88         }
 89       }
 90       return false;
 91     };
 92 
 93     // 当前编辑哪个元素
 94     $scope.currentEditingId = -1;
 95     // -1代表一个肯定不存在的元素,默认没有任何被编辑
 96     $scope.editing = function(id) {
 97       $scope.currentEditingId = id;
 98     };
 99     $scope.save = function() {
100       $scope.currentEditingId = -1;
101     };
102 
103     // $scope.checkall = false;
104     // $scope.$watch('checkall', function(now, old) {
105     //   for (var i = 0; i < $scope.todos.length; i++) {
106     //     $scope.todos[i].completed = now;
107     //   }
108     // });
109 
110     var now = true;
111     $scope.toggleAll = function() {
112       for (var i = 0; i < $scope.todos.length; i++) {
113         $scope.todos[i].completed = now;
114       }
115       now = !now;
116     }
117 
118     // 状态筛选
119     $scope.selector = {}; // {} {completed:true} {completed:false}
120     // 点击事件的方式不合适,有DOM操作
121     // 让$scope也有一个指向$location的数据成员
122     $scope.$location = $location;
123     // watch只能监视属于$scope的成员
124     $scope.$watch('$location.path()', function(now, old) {
125       // 1. 拿到锚点值
126       // 这样写就要求执行环境必须要有window对象
127       // var hash = window.location.hash;
128       // console.log($location);
129       // console.log(now);
130       // 2. 根据锚地值对selector做变换
131       switch (now) {
132         case '/active':
133           $scope.selector = { completed: false };
134           break;
135         case '/completed':
136           $scope.selector = { completed: true };
137           break;
138         default:
139           $scope.selector = {};
140           break;
141       }
142     });
143 
144     // 自定义比较函数, 默认filter过滤器使用的是模糊匹配
145     $scope.equalCompare = function(source, target) {
146       // console.log(source);
147       // console.log(target);
148       // return false;
149       return source === target;
150     };
151 
152 
153   }]);
154 
155 })(angular);
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-04-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
todoMVC_mvc框架是什么
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/10/01
8800
vue todolist案例_nodejs mvc
通过 nmp 安装相关依赖,进入vs code ,找到文件,右键点击在集成终端中打开,输入命令npm i进行安装;并且安装npm i vue@2.6.10
全栈程序员站长
2022/10/01
1.4K0
vue todolist案例_nodejs mvc
基础案例:TodoMVC[通俗易懂]
将 todomvc-angular\src\app\app.component.html 文件内容替换如下:
全栈程序员站长
2022/09/06
3870
基础案例:TodoMVC[通俗易懂]
前端MVC学习总结(一)——MVC概要与angular概要、模板与数据绑定
张果
2018/01/04
16.2K0
前端MVC学习总结(一)——MVC概要与angular概要、模板与数据绑定
AngularJS基础入门初探
  (2)由Misko Hevery 等人创建,2009年被Google所收购,用于其多款产品
Edison Zhou
2018/08/20
2K0
AngularJS基础入门初探
AngularJs(3)
<script type="text/javascript" src="angular.min.js"></script>
py3study
2020/01/14
1.8K0
AngularJS快速入门
记得第一次听说AngularJS这项很赞的Web的前端技术,那时还是2014年,年中时我们我的一个大牛兄弟当时去面试时,被问到了是否熟悉该技术,当时他了解和使用的技术比较多。我们询问他面试情况时,他给俺这个菜菜科普了该技术,印象比较深的是该技术支持前端MVC架构,可以完成大部分原有的后台工作,当时就觉得很神奇,但由于自身技术基础比较薄弱,没有太多时间和积累去学习新的技术,因而搁置了。在2016新年初始,正好有一些富余时间,正好学习下这个被称为就是“”两个大括号“”的前端框架(当前已经非常成熟,国内大部分公司
用户1216676
2018/01/24
2.8K0
AngularJS快速入门
todomvc项目_reactive vue
在h1中引入{ {msg}},在js文件中将msg赋值,从而在html中显示大标签的内容
全栈程序员站长
2022/10/01
1.2K0
第215天:Angular---指令
在 AngularJS 中将前缀为 ng- 这种属性称之为指令,其作用就是为 DOM 元素调用方法、定义行为绑定数据等
半指温柔乐
2018/09/11
3.6K0
再谈angularJS数据绑定机制及背后原理—angularJS常见问题总结
ng-bind 单向数据绑定($scope -> view),用于数据显示,简写形式是 {{}}。
周陆军
2018/08/02
8.8K0
项目开发实战_go项目实战
TodoMVC 是一个非常经典的案例,功能非常丰富,并且针对多种不同技术分别都开发了此项目,比如React、AngularJS、JQuery等等。
全栈程序员站长
2022/11/04
1.6K0
项目开发实战_go项目实战
Angularjs基础(八)
AngularJS Bootstrap     AngularJS 的首选样式表是 Twitter Bootstrap ,Twitter Bootstrap 是目前最受欢迎的前端框架 Bootstrap     你可以在你的 AngularJS 应用中加入 Twitter Bootstrap,你可以在你的 <head>元素中添加如下代码:     <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/boo
用户1197315
2018/01/19
3.3K0
Kibana源码剖析 —— savedSearch从读取到跳转
持久化对象 Kibana中可以查询到很多保存的对象,他们都存储在es中一个叫做.kibana的索引中。 搜索 存储在type为search中; 图表 存储在type为visualization中; 仪表板 存储在type为dashboard中; 每个plugins下的tab页都有一个对应的savedObject对象,比如 检索页对应的是savedSearch对象(discover/saved_searches/_saved_search.js) 图表页对应的是savedVisualization对象(vis
用户1154259
2018/01/17
1.7K1
KnockoutJS语法
  假设我们的页面输入区域有一个div用来展示一件物品的名字,同时有一个输入框用来编辑这件物品的名字
javascript.shop
2019/09/04
2.5K0
KnockoutJS语法
【AngularJS】 # AngularJS入门
ng-app 指令定义一个 AngularJS 应用程序。 若不声明,将直接显示表达式。
全栈程序员站长
2022/09/15
24.8K0
【AngularJS】 # AngularJS入门
Angular企业级开发(10)-Smart Table插件开发
1.Smart Table内置的分页功能 Smart Table是基于AngularJS模块特性开发出来的一款优秀的表格组件,默认就支持过滤、排序等核心功能。开发者基于它也可以开发插件,满足个性化需求
八哥
2018/01/18
2K0
Angular企业级开发(10)-Smart Table插件开发
AngularJS DEMO – 不断更新中
<!DOCTYPE html> <html> <head> <title>Angular DEMO 1</title> <script type="text/javascript" src="/bower_components/angularjs/angular.js"></script> </head> <body ng-app ng-init="name='World'" > <h1>Hello,{{name}}!</h1> </body> </html> <!DOCTYPE html> <ht
前Thoughtworks-杨焱
2021/12/08
8280
angularjs自定义指令实现分页插件
由于最近的一个项目使用的是angularjs1.0的版本,涉及到分页查询数据的功能,后来自己就用自定义指令实现了该功能。现在单独做了个简易的小demo,主要是为了分享自己写的分页功能。注:本实例调用的
用户1174387
2018/01/17
3.3K0
angularjs自定义指令实现分页插件
(4)Angular的开发
angular框架,库,是一款非常优秀的前端高级JS框架,有了这个框架就可以轻松构建SPA应用程序,通过指令宽展了HTML,通过表达式绑定数据到HTML。
达达前端
2019/07/22
3.6K0
前端MVC学习总结(四)——NodeJS+MongoDB+AngularJS+Bootstrap书店示例
摘要总结:本文介绍了如何使用AngularJS04进行图书信息管理系统开发。主要包括了图书信息录入、查询、修改和删除等功能。同时,还提供了编辑图书和删除图书的接口。通过使用AngularJS04的指令和指令模块,可以方便地实现图书信息管理系统。
张果
2018/01/04
2.5K0
前端MVC学习总结(四)——NodeJS+MongoDB+AngularJS+Bootstrap书店示例
相关推荐
todoMVC_mvc框架是什么
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验