セクション>
ホームページ > 記事 > ウェブフロントエンド > AngularJS での TodoMVC の分析 研究ノート_AngularJS
最近AngularJSについて調べているので少しまとめてみます。
公式ウェブサイトのアドレス: http://angularjs.org/
最初にいくつかのチュートリアルをお勧めします
1. AngularJS Getting Started Tutorial これは比較的基本的なものであり、公式チュートリアルの翻訳です。
2. 7 つのステップで AngularJS 初心者からエキスパートまで これも比較的基本的なもので、オンライン音楽再生 Web サイトを作成しました。
3. AngularJS 開発ガイド このチュートリアルは比較的包括的ですが、翻訳が少しわかりにくいように感じます。
これらのチュートリアルを読んで、AngularJS について少し理解できた気がするので、それを使って AngularJS で書かれた todomvc を分析してみましょう。
Todomvc 公式ウェブサイトアドレス: http://todomvc.com/
プロジェクトのディレクトリは次のとおりです:
bower_components には 2 つのフォルダーが配置されています。angular フォルダーは、angular.js ファイルを保存するために使用されます。todomvc-common フォルダーには、すべての Todo プロジェクトの統合された cssjs が含まれています (左側のコンテンツの生成にのみ使用され、ToDo プロジェクトとは関係ありません)。プロジェクト)と写真。
js フォルダーは大きなヘッダーであり、対応するコントローラー (コントローラー) ディレクティブ (命令) サービス (サービス) と app.js が含まれています。
テスト フォルダーにはテスト用のコードが含まれており、分析されません。
index.html はプロジェクトのビューページです。
まず app.js を見てみましょう
モジュール todomvc を定義します
サービスの下の todoStorage.js をもう一度見てください
todoStorage のサービス メソッドは、ファクトリ メソッドを使用して作成されます。このサービス メソッドの本質は、JSON2 と HTML5 の機能を使用する 2 つのメソッド (get と put) を返すことです。 get は、localStorage から todo のコンテンツを取得して JSON に解析し、put は todo を JSON 文字列に変換して localStorage に保存します。
ディレクティブの下にある 2 つの命令ファイルをもう一度見てください。
todoFocus.js
関数に返されるパラメータのうち、elem は命令の要素を含む配列、attrs は要素のすべての属性と属性名で構成されるオブジェクトです。
2 つの AngularJS メソッドが使用されます
$watch(watchExpression,listener,objectEquality) は、watchExpression が変更されるたびに、リスナー コールバックが実行されます。
$timeout(fn[,lay][,invokeApply]) タイムアウト値に達したら、fn 関数を実行します。
todoFocus.js は todoFocus ディレクティブを作成します。要素に todoFocus 属性がある場合、この命令は、todoFocus 属性の値が true に変更されると、リスナーを要素の todoFocus 属性の値に追加します。 }, 0, false); 遅延時間は 0 秒なので、elem[0].focus() はすぐに実行されます。
todoEscape.js
todoEscape.js は todoEscape ディレクティブを作成します。 Escape キーを押すと、attrs.todoEscape 式が実行されます。
controllers フォルダー内のヘッダー、todoCtrl.js を見てください。このファイルは少し長いので、コメントだけを書きました。
// 新しい Todo を記録します
$scope.newTodo = '';
// 編集した Todo を記録します
$scope.editedTodo = null;
// todos の値が変更されたときにメソッドを実行します
$scope.$watch('todos', function (newValue, oldValue) {
// 未完了の Todo の数を取得します
$scope.remainingCount = filterFilter(todos, { completed: false }).length;
// 完了した Todo の数を取得します
$scope.completedCount = todos.length - $scope.remainingCount;
// $scope.remainingCount が 0 の場合に限り、$scope.allChecked は true
$scope.allChecked = !$scope.remainingCount;
// todos の新しい値が古い値と等しくない場合、todos
を localStorage に保存します
If (newValue !== oldValue) { // これにより、ローカル ストレージへの不必要な呼び出しが防止されます
todoStorage.put(todos);
}
}, true);
If ($location.path() === '') {
// $location.path() が空の場合は、/
に設定します
$location.path('/');
}
$scope.location = $location;
// location.path() の値が変更されたときにメソッドを実行します
$scope.$watch('location.path()', 関数 (パス) {
// ステータスフィルターを取得
// パスが '/active' の場合、フィルターは { completed: false }
// パスが '/completed' の場合、フィルターは { completed: true }
// それ以外の場合、フィルターは null
$scope.statusFilter = (path === '/active') ?
{ 完了: false } : (パス === '/completed') ?
{ 完了: true } : null;
});
// 新しい Todo を追加
$scope.addTodo = function () {
var newTodo = $scope.newTodo.trim();
If (!newTodo.length) {
return;
}
// todos に todo を追加します。completed 属性のデフォルトは false
todos.push({
title: newTodo、
完了: false
});
// 空のままにしておきます
$scope.newTodo = '';
};
//todo を編集
$scope.editTodo = 関数 (todo) {
$scope.editedTodo = todo;
// 元の Todo のクローンを作成して、オンデマンドで復元します。
// 編集を再開する準備として、編集前に ToDo を保存します
$scope.originalTodo = angular.extend({}, todo);
};
// todo の編集が完了しました
$scope.doneEditing = 関数 (todo) {
// 空のままにしておきます
$scope.editedTodo = null;
todo.title = todo.title.trim();
If (!todo.title) {
// todo のタイトルが空の場合は、todo を削除します
$scope.removeTodo(todo);
}
};
//編集前の todo を復元
$scope.revertEditing = 関数 (todo) {
todos[todos.indexOf(todo)] = $scope.originalTodo;
$scope.doneEditing($scope.originalTodo);
};
// todo
を削除します
$scope.removeTodo = 関数 (todo) {
todos.splice(todos.indexOf(todo), 1);
};
// 完了した ToDo をクリア
$scope.clearCompletedTodos = function () {
$scope.todos = todos = todos.filter(function (val) {
return !val.completed;
});
};
// すべての Todo のステータスをマークします (true または false)
$scope.markAll = 関数 (完了) {
todos.forEach(function (todo) {
todo.completed = 完了;
});
};
});
まず、最下で、対応する JS を組み込みます。これは多くの点で行われます。
セクションでは、ngShow メソッドを使用しています。todos の長さに応じて表示されるかどうかを判断し、AngularJS が未処理であることを表示するために、開始時に追加されたセクションです。
この ID は、allChecked モデルに toggle-all のチェックボックスが設定されており、markAll(allChecked) をポイントして allChecked の値を渡し、すべての todo をマークします。
ngRepeat循環环产生li标签を使用、todosのtodo | filter:status$index による追跡、循環 todos、statusFilter によるフィルタリング、$index 追跡。クラスはトグルのチェックボックスで todo.completed に設定されています。 Todo を編集すると、次のフォーム内の todoFocus 命令が実行され、この時点でフォーム内の入力が表示されます。クラスは破棄のボタンで、クリック イベント、ポイント ボタンでremoveTodo(todo)、この条文を削除することが決定されています。最後に見る todos の统计情報展示の html
ng-pluralize は、remainingCount の数が 1 の場合は残りのアイテムを表示し、そうでない場合は残りのアイテムを表示します。
id はフィルターの UL ポリシー内にあり、location.path() の内容に応じて、異なるポリシーが選択されます。id はクリア完了のボタンで、ポイント イベントが追加され、clearCompletedTodos() が開始され、完了したすべての todo が削除されます。
今日のレポートはここにあります。全員がこれらの人々の認識であり、小さな協力者が喜んでくれることを望んでいます。