TodoMVC using AngularJS

Developer
Size
6,551 Kb
Views
6,072

How do I make an todomvc using angularjs?

A TodoMVC example using AngularJS from http://todomvc.com, a project which offers the same Todo application implemented using MV* concepts in most of the popular JavaScript MV* frameworks of today and helps developers select an MV* framework for structuring and organizing their JavaScript web apps.. What is a todomvc using angularjs? How do you make a todomvc using angularjs? This script and codes were developed by Victor Yan on 05 January 2023, Thursday.

TodoMVC using AngularJS Previews

TodoMVC using AngularJS - Script Codes HTML Codes

<!DOCTYPE html>
<html >
<head> <meta charset="UTF-8"> <title>TodoMVC using AngularJS</title> <link rel="stylesheet" href="css/style.css">
</head>
<body> <html lang="en" data-framework="angularjs">	<head>	<meta charset="utf-8">	<meta http-equiv="X-UA-Compatible" content="IE=edge">	<title>AngularJS • TodoMVC</title>	</head>	<body ng-app="todomvc">	<ng-view />	<script type="text/ng-template" id="todomvc-index.html">	<section id="todoapp" ng-controller="TodoCtrl">	<header id="header">	<h1>todos</h1>	<form id="todo-form" ng-submit="addTodo()">	<input id="new-todo" placeholder="What needs to be done?" ng-model="newTodo" autofocus>	</form>	</header>	<section id="main" ng-show="todos.length" ng-cloak>	<input id="toggle-all" type="checkbox" ng-model="allChecked" ng-click="markAll(allChecked)">	<label for="toggle-all">Mark all as complete</label>	<ul id="todo-list">	<li ng-repeat="todo in todos | filter:statusFilter track by $index" ng-class="{completed: todo.completed, editing: todo == editedTodo}">	<div class="view">	<input class="toggle" type="checkbox" ng-model="todo.completed">	<label ng-dblclick="editTodo(todo)">{{todo.title}}</label>	<button class="destroy" ng-click="removeTodo(todo)"></button>	</div>	<form ng-submit="doneEditing(todo)">	<input class="edit" ng-trim="false" ng-model="todo.title" todo-escape="revertEditing(todo)" ng-blur="doneEditing(todo)" todo-focus="todo == editedTodo">	</form>	</li>	</ul>	</section>	<footer id="footer" ng-show="todos.length" ng-cloak>	<span id="todo-count"><strong>{{remainingCount}}</strong>	<ng-pluralize count="remainingCount" when="{ one: 'item left', other: 'items left' }"></ng-pluralize>	</span>	<ul id="filters">	<li>	<a ng-class="{selected: status == ''} " href="#/">All</a>	</li>	<li>	<a ng-class="{selected: status == 'active'}" href="#/active">Active</a>	</li>	<li>	<a ng-class="{selected: status == 'completed'}" href="#/completed">Completed</a>	</li>	</ul>	<button id="clear-completed" ng-click="clearCompletedTodos()" ng-show="completedCount">Clear completed ({{completedCount}})</button>	</footer>	</section>	<footer id="info">	<p>Double-click to edit a todo</p>	<p>Credits:	<a href="https://twitter.com/cburgdorf">Christoph Burgdorf</a>,	<a href="http://ericbidelman.com">Eric Bidelman</a>,	<a href="http://jacobmumm.com">Jacob Mumm</a> and	<a href="http://igorminar.com">Igor Minar</a>	</p>	<p>Part of <a href="http://todomvc.com">TodoMVC</a></p>	</footer>	</script>	</body>
</html> <script src='https://ajax.googleapis.com/ajax/libs/angularjs/1.3.0-beta.17/angular.min.js'></script>
<script src='https://ajax.googleapis.com/ajax/libs/angularjs/1.3.0-beta.17/angular-route.min.js'></script> <script src="js/index.js"></script>
</body>
</html>

TodoMVC using AngularJS - Script Codes CSS Codes

html,
body {	margin: 0;	padding: 0;
}
button {	margin: 0;	padding: 0;	border: 0;	background: none;	font-size: 100%;	vertical-align: baseline;	font-family: inherit;	color: inherit;	-webkit-appearance: none;	-ms-appearance: none;	-o-appearance: none;	appearance: none;
}
body {	font: 14px 'Helvetica Neue', Helvetica, Arial, sans-serif;	line-height: 1.4em;	background: #eaeaea url('bg.png');	color: #4d4d4d;	width: 550px;	margin: 0 auto;	-webkit-font-smoothing: antialiased;	-moz-font-smoothing: antialiased;	-ms-font-smoothing: antialiased;	-o-font-smoothing: antialiased;	font-smoothing: antialiased;
}
button,
input[type="checkbox"] { outline: none;
}
#todoapp {	background: #fff;	background: rgba(255, 255, 255, 0.9);	margin: 130px 0 40px 0;	border: 1px solid #ccc;	position: relative;	border-top-left-radius: 2px;	border-top-right-radius: 2px;	box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.2),	0 25px 50px 0 rgba(0, 0, 0, 0.15);
}
#todoapp:before {	content: '';	border-left: 1px solid #f5d6d6;	border-right: 1px solid #f5d6d6;	width: 2px;	position: absolute;	top: 0;	left: 40px;	height: 100%;
}
#todoapp input::-webkit-input-placeholder {	font-style: italic;
}
#todoapp input::-moz-placeholder {	font-style: italic;	color: #a9a9a9;
}
#todoapp h1 {	position: absolute;	top: -120px;	width: 100%;	font-size: 70px;	font-weight: bold;	text-align: center;	color: #b3b3b3;	color: rgba(255, 255, 255, 0.3);	text-shadow: -1px -1px rgba(0, 0, 0, 0.2);	-webkit-text-rendering: optimizeLegibility;	-moz-text-rendering: optimizeLegibility;	-ms-text-rendering: optimizeLegibility;	-o-text-rendering: optimizeLegibility;	text-rendering: optimizeLegibility;
}
#header {	padding-top: 15px;	border-radius: inherit;
}
#header:before {	content: '';	position: absolute;	top: 0;	right: 0;	left: 0;	height: 15px;	z-index: 2;	border-bottom: 1px solid #6c615c;	background: #8d7d77;	background: -webkit-gradient(linear, left top, left bottom, from(rgba(132, 110, 100, 0.8)),to(rgba(101, 84, 76, 0.8)));	background: -webkit-linear-gradient(top, rgba(132, 110, 100, 0.8), rgba(101, 84, 76, 0.8));	background: linear-gradient(top, rgba(132, 110, 100, 0.8), rgba(101, 84, 76, 0.8));	filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#9d8b83', EndColorStr='#847670');	border-top-left-radius: 1px;	border-top-right-radius: 1px;
}
#new-todo,
.edit {	position: relative;	margin: 0;	width: 100%;	font-size: 24px;	font-family: inherit;	line-height: 1.4em;	border: 0;	outline: none;	color: inherit;	padding: 6px;	border: 1px solid #999;	box-shadow: inset 0 -1px 5px 0 rgba(0, 0, 0, 0.2);	-moz-box-sizing: border-box;	-ms-box-sizing: border-box;	-o-box-sizing: border-box;	box-sizing: border-box;	-webkit-font-smoothing: antialiased;	-moz-font-smoothing: antialiased;	-ms-font-smoothing: antialiased;	-o-font-smoothing: antialiased;	font-smoothing: antialiased;
}
#new-todo {	padding: 16px 16px 16px 60px;	border: none;	background: rgba(0, 0, 0, 0.02);	z-index: 2;	box-shadow: none;
}
#main {	position: relative;	z-index: 2;	border-top: 1px dotted #adadad;
}
label[for='toggle-all'] {	display: none;
}
#toggle-all {	position: absolute;	top: -42px;	left: -4px;	width: 40px;	text-align: center;	/* Mobile Safari */	border: none;
}
#toggle-all:before {	content: '»';	font-size: 28px;	color: #d9d9d9;	padding: 0 25px 7px;
}
#toggle-all:checked:before {	color: #737373;
}
#todo-list {	margin: 0;	padding: 0;	list-style: none;
}
#todo-list li {	position: relative;	font-size: 24px;	border-bottom: 1px dotted #ccc;
}
#todo-list li:last-child {	border-bottom: none;
}
#todo-list li.editing {	border-bottom: none;	padding: 0;
}
#todo-list li.editing .edit {	display: block;	width: 506px;	padding: 13px 17px 12px 17px;	margin: 0 0 0 43px;
}
#todo-list li.editing .view {	display: none;
}
#todo-list li .toggle {	text-align: center;	width: 40px;	/* auto, since non-WebKit browsers doesn't support input styling */	height: auto;	position: absolute;	top: 0;	bottom: 0;	margin: auto 0;	/* Mobile Safari */	border: none;	-webkit-appearance: none;	-ms-appearance: none;	-o-appearance: none;	appearance: none;
}
#todo-list li .toggle:after {	content: '✔';	/* 40 + a couple of pixels visual adjustment */	line-height: 43px;	font-size: 20px;	color: #d9d9d9;	text-shadow: 0 -1px 0 #bfbfbf;
}
#todo-list li .toggle:checked:after {	color: #85ada7;	text-shadow: 0 1px 0 #669991;	bottom: 1px;	position: relative;
}
#todo-list li label {	white-space: pre;	word-break: break-word;	padding: 15px 60px 15px 15px;	margin-left: 45px;	display: block;	line-height: 1.2;	-webkit-transition: color 0.4s;	transition: color 0.4s;
}
#todo-list li.completed label {	color: #a9a9a9;	text-decoration: line-through;
}
#todo-list li .destroy {	display: none;	position: absolute;	top: 0;	right: 10px;	bottom: 0;	width: 40px;	height: 40px;	margin: auto 0;	font-size: 22px;	color: #a88a8a;	-webkit-transition: all 0.2s;	transition: all 0.2s;
}
#todo-list li .destroy:hover {	text-shadow: 0 0 1px #000, 0 0 10px rgba(199, 107, 107, 0.8);	-webkit-transform: scale(1.3);	-ms-transform: scale(1.3);	transform: scale(1.3);
}
#todo-list li .destroy:after {	content: '✖';
}
#todo-list li:hover .destroy {	display: block;
}
#todo-list li .edit {	display: none;
}
#todo-list li.editing:last-child {	margin-bottom: -1px;
}
#footer {	color: #777;	padding: 0 15px;	position: absolute;	right: 0;	bottom: -31px;	left: 0;	height: 20px;	z-index: 1;	text-align: center;
}
#footer:before {	content: '';	position: absolute;	right: 0;	bottom: 31px;	left: 0;	height: 50px;	z-index: -1;	box-shadow: 0 1px 1px rgba(0, 0, 0, 0.3),	0 6px 0 -3px rgba(255, 255, 255, 0.8),	0 7px 1px -3px rgba(0, 0, 0, 0.3),	0 43px 0 -6px rgba(255, 255, 255, 0.8),	0 44px 2px -6px rgba(0, 0, 0, 0.2);
}
#todo-count {	float: left;	text-align: left;
}
#filters {	margin: 0;	padding: 0;	list-style: none;	position: absolute;	right: 0;	left: 0;
}
#filters li {	display: inline;
}
#filters li a {	color: #83756f;	margin: 2px;	text-decoration: none;
}
#filters li a.selected {	font-weight: bold;
}
#clear-completed {	float: right;	position: relative;	line-height: 20px;	text-decoration: none;	background: rgba(0, 0, 0, 0.1);	font-size: 11px;	padding: 0 10px;	border-radius: 3px;	box-shadow: 0 -1px 0 0 rgba(0, 0, 0, 0.2);
}
#clear-completed:hover {	background: rgba(0, 0, 0, 0.15);	box-shadow: 0 -1px 0 0 rgba(0, 0, 0, 0.3);
}
#info {	margin: 65px auto 0;	color: #a6a6a6;	font-size: 12px;	text-shadow: 0 1px 0 rgba(255, 255, 255, 0.7);	text-align: center;
}
#info a {	color: inherit;
}
/*	Hack to remove background from Mobile Safari.	Can't use it globally since it destroys checkboxes in Firefox and Opera
*/
@media screen and (-webkit-min-device-pixel-ratio:0) {	#toggle-all,	#todo-list li .toggle {	background: none;	}	#todo-list li .toggle {	height: 40px;	}	#toggle-all {	top: -56px;	left: -15px;	width: 65px;	height: 41px;	-webkit-transform: rotate(90deg);	-ms-transform: rotate(90deg);	transform: rotate(90deg);	-webkit-appearance: none;	appearance: none;	}
}
.hidden {	display: none;
}
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;
}
.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;	width: 272px;	top: 8px;	left: -300px;	padding: 10px;	border-radius: 5px;	background-color: rgba(255, 255, 255, .6);	-webkit-transition-property: left;	transition-property: left;	-webkit-transition-duration: 500ms;	transition-duration: 500ms;
}
@media (min-width: 899px) {	.learn-bar {	width: auto;	margin: 0 0 0 300px;	}	.learn-bar > .learn {	left: 8px;	}	.learn-bar #todoapp {	width: 550px;	margin: 130px auto 40px auto;	}
}
[ng-cloak] {	display: none;
}

TodoMVC using AngularJS - Script Codes JS Codes

/** * The main TodoMVC app module * * @type {angular.Module} */
var todomvc = angular.module('todomvc', ['ngRoute'])	.config(function ($routeProvider) {	$routeProvider.when('/', {	controller: 'TodoCtrl',	templateUrl: 'todomvc-index.html'	}).when('/:status', {	controller: 'TodoCtrl',	templateUrl: 'todomvc-index.html'	}).otherwise({	redirectTo: '/'	});	});
/** * The main controller for the app. The controller: * - retrieves and persists the model via the todoStorage service * - exposes the model to the template and provides event handlers */
todomvc.controller('TodoCtrl', function TodoCtrl($scope, $routeParams, todoStorage, filterFilter) {	var todos = $scope.todos = todoStorage.get();	$scope.newTodo = '';	$scope.editedTodo = null;	$scope.$watch('todos', function (newValue, oldValue) {	$scope.remainingCount = filterFilter(todos, { completed: false }).length;	$scope.completedCount = todos.length - $scope.remainingCount;	$scope.allChecked = !$scope.remainingCount;	if (newValue !== oldValue) { // This prevents unneeded calls to the local storage	todoStorage.put(todos);	}	}, true);	// Monitor the current route for changes and adjust the filter accordingly.	$scope.$on('$routeChangeSuccess', function () {	var status = $scope.status = $routeParams.status || '';	$scope.statusFilter = (status === 'active') ?	{ completed: false } : (status === 'completed') ?	{ completed: true } : null;	});	$scope.addTodo = function () {	var newTodo = $scope.newTodo.trim();	if (!newTodo.length) {	return;	}	todos.push({	title: newTodo,	completed: false	});	$scope.newTodo = '';	};	$scope.editTodo = function (todo) {	$scope.editedTodo = todo;	// Clone the original todo to restore it on demand.	$scope.originalTodo = angular.extend({}, todo);	};	$scope.doneEditing = function (todo) {	$scope.editedTodo = null;	todo.title = todo.title.trim();	if (!todo.title) {	$scope.removeTodo(todo);	}	};	$scope.revertEditing = function (todo) {	todos[todos.indexOf(todo)] = $scope.originalTodo;	$scope.doneEditing($scope.originalTodo);	};	$scope.removeTodo = function (todo) {	todos.splice(todos.indexOf(todo), 1);	};	$scope.clearCompletedTodos = function () {	$scope.todos = todos = todos.filter(function (val) {	return !val.completed;	});	};	$scope.markAll = function (completed) {	todos.forEach(function (todo) {	todo.completed = !completed;	});	};
});
/** * Services that persists and retrieves TODOs from localStorage */
todomvc.factory('todoStorage', function () {	var STORAGE_ID = 'todos-angularjs';	return {	get: function () {	return JSON.parse(localStorage.getItem(STORAGE_ID) || '[]');	},	put: function (todos) {	localStorage.setItem(STORAGE_ID, JSON.stringify(todos));	}	};
});
/** * Directive that places focus on the element it is applied to when the expression it binds to evaluates to true */
todomvc.directive('todoFocus', function todoFocus($timeout) {	return function (scope, elem, attrs) {	scope.$watch(attrs.todoFocus, function (newVal) {	if (newVal) {	$timeout(function () {	elem[0].focus();	}, 0, false);	}	});	};
});
/** * Directive that executes an expression when the element it is applied to gets * an `escape` keydown event. */
todomvc.directive('todoEscape', function () {	var ESCAPE_KEY = 27;	return function (scope, elem, attrs) {	elem.bind('keydown', function (event) {	if (event.keyCode === ESCAPE_KEY) {	scope.$apply(attrs.todoEscape);	}	});	};
});
TodoMVC using AngularJS - Script Codes
TodoMVC using AngularJS - Script Codes
Home Page Home
Developer Victor Yan
Username tipsoftheday
Uploaded January 05, 2023
Rating 3.5
Size 6,551 Kb
Views 6,072
Do you need developer help for TodoMVC using AngularJS?

Find the perfect freelance services for your business! Fiverr's mission is to change how the world works together. Fiverr connects businesses with freelancers offering digital services in 500+ categories. Find Developer!

Victor Yan (tipsoftheday) Script Codes
Create amazing SEO content with AI!

Jasper is the AI Content Generator that helps you and your team break through creative blocks to create amazing, original content 10X faster. Discover all the ways the Jasper AI Content Platform can help streamline your creative workflows. Start For Free!