Commit 8d40a1c0 authored by dmitriz's avatar dmitriz

angularjs-perf: Change to `Controller as` syntax

parent 81897ce5
......@@ -8,45 +8,45 @@
<style>[ng-cloak] { display: none; }</style>
</head>
<body>
<section id="todoapp" ng-controller="TodoCtrl">
<section id="todoapp" ng-controller="TodoCtrl as TC">
<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 id="todo-form" ng-submit="TC.addTodo()">
<input id="new-todo" placeholder="What needs to be done?" ng-model="TC.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)">
<section id="main" ng-show="TC.todos.length" ng-cloak>
<input id="toggle-all" type="checkbox" ng-model="TC.allChecked" ng-click="TC.markAll(TC.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}">
<li ng-repeat="todo in TC.todos | filter:TC.statusFilter track by $index" ng-class="{completed: todo.completed, editing: todo == TC.editedTodo}">
<div class="view">
<input class="toggle" type="checkbox" ng-model="todo.completed" ng-change="todoCompleted(todo)">
<label ng-dblclick="editTodo(todo)">{{todo.title}}</label>
<button class="destroy" ng-click="removeTodo(todo)"></button>
<input class="toggle" type="checkbox" ng-model="todo.completed" ng-change="TC.todoCompleted(todo)">
<label ng-dblclick="TC.editTodo(todo)">{{todo.title}}</label>
<button class="destroy" ng-click="TC.removeTodo(todo)"></button>
</div>
<form ng-submit="doneEditing(todo)">
<input class="edit" ng-trim="false" ng-model="todo.title" ng-blur="doneEditing(todo)" todo-escape="revertEditing(todo)" todo-focus="todo == editedTodo">
<form ng-submit="TC.doneEditing(todo)">
<input class="edit" ng-trim="false" ng-model="todo.title" ng-blur="TC.doneEditing(todo)" todo-escape="TC.revertEditing(todo)" todo-focus="todo == TC.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>
<footer id="footer" ng-show="TC.todos.length" ng-cloak>
<span id="todo-count"><strong>{{TC.remainingCount}}</strong>
<ng-pluralize count="TC.remainingCount" when="{ one: 'item left', other: 'items left' }"></ng-pluralize>
</span>
<ul id="filters">
<li>
<a ng-class="{selected: location.path() == '/'} " href="#/">All</a>
<a ng-class="{selected: TC.location.path() == '/'} " href="#/">All</a>
</li>
<li>
<a ng-class="{selected: location.path() == '/active'}" href="#/active">Active</a>
<a ng-class="{selected: TC.location.path() == '/active'}" href="#/active">Active</a>
</li>
<li>
<a ng-class="{selected: location.path() == '/completed'}" href="#/completed">Completed</a>
<a ng-class="{selected: TC.location.path() == '/completed'}" href="#/completed">Completed</a>
</li>
</ul>
<button id="clear-completed" ng-click="clearCompletedTodos()" ng-show="remainingCount < todos.length">Clear completed</button>
<button id="clear-completed" ng-click="TC.clearCompletedTodos()" ng-show="TC.remainingCount < TC.todos.length">Clear completed</button>
</footer>
</section>
<footer id="info">
......
......@@ -8,5 +8,5 @@
*
* @type {angular.Module}
*/
angular.module('todomvc', ['todoCtrl', 'todoEscape', 'todoStorage']);
angular.module('todomvc', ['todoCtrl', 'todoEscape', 'todoFocus', 'todoStorage']);
})();
......@@ -10,28 +10,29 @@
* - exposes the model to the template and provides event handlers
*/
.controller('TodoCtrl', function TodoCtrl($scope, $location, $filter, todoStorage) {
var todos = $scope.todos = todoStorage.get();
var TC = this;
var todos = TC.todos = todoStorage.get();
$scope.newTodo = '';
$scope.remainingCount = $filter('filter')(todos, {completed: false}).length;
$scope.editedTodo = null;
TC.newTodo = '';
TC.remainingCount = $filter('filter')(todos, {completed: false}).length;
TC.editedTodo = null;
if ($location.path() === '') {
$location.path('/');
}
$scope.location = $location;
TC.location = $location;
$scope.$watch('location.path()', function (path) {
$scope.statusFilter = { '/active': {completed: false}, '/completed': {completed: true} }[path];
$scope.$watch('TC.location.path()', function (path) {
TC.statusFilter = { '/active': {completed: false}, '/completed': {completed: true} }[path];
});
$scope.$watch('remainingCount == 0', function (val) {
$scope.allChecked = val;
$scope.$watch('TC.remainingCount == 0', function (val) {
TC.allChecked = val;
});
$scope.addTodo = function () {
var newTodo = $scope.newTodo.trim();
TC.addTodo = function () {
var newTodo = TC.newTodo.trim();
if (newTodo.length === 0) {
return;
}
......@@ -42,55 +43,56 @@
});
todoStorage.put(todos);
$scope.newTodo = '';
$scope.remainingCount++;
TC.newTodo = '';
TC.remainingCount++;
};
$scope.editTodo = function (todo) {
$scope.editedTodo = todo;
TC.editTodo = function (todo) {
TC.editedTodo = todo;
// Clone the original todo to restore it on demand.
$scope.originalTodo = angular.extend({}, todo);
TC.originalTodo = angular.extend({}, todo);
};
$scope.doneEditing = function (todo) {
$scope.editedTodo = null;
TC.doneEditing = function (todo) {
TC.editedTodo = null;
todo.title = todo.title.trim();
if (!todo.title) {
$scope.removeTodo(todo);
TC.removeTodo(todo);
}
todoStorage.put(todos);
};
$scope.revertEditing = function (todo) {
todos[todos.indexOf(todo)] = $scope.originalTodo;
$scope.doneEditing($scope.originalTodo);
TC.revertEditing = function (todo) {
todos[todos.indexOf(todo)] = TC.originalTodo;
TC.doneEditing(TC.originalTodo);
};
$scope.removeTodo = function (todo) {
$scope.remainingCount -= todo.completed ? 0 : 1;
TC.removeTodo = function (todo) {
TC.remainingCount -= todo.completed ? 0 : 1;
todos.splice(todos.indexOf(todo), 1);
todoStorage.put(todos);
};
$scope.todoCompleted = function (todo) {
$scope.remainingCount += todo.completed ? -1 : 1;
TC.todoCompleted = function (todo) {
TC.remainingCount += todo.completed ? -1 : 1;
todoStorage.put(todos);
};
$scope.clearCompletedTodos = function () {
$scope.todos = todos = todos.filter(function (val) {
TC.clearCompletedTodos = function () {
TC.todos = todos = todos.filter(function (val) {
return !val.completed;
});
todoStorage.put(todos);
};
$scope.markAll = function (completed) {
TC.markAll = function (completed) {
todos.forEach(function (todo) {
todo.completed = completed;
});
$scope.remainingCount = completed ? 0 : todos.length;
TC.remainingCount = completed ? 0 : todos.length;
todoStorage.put(todos);
};
});
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment