<!doctype html>
<html lang="ja" ng-app="project">
<head>
<meta charset="UTF-8">
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.min.js"></script>
<!-- [a] - routeモジュールを読込 -->
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular-route.min.js"></script>
<!-- [b] - AngularJS用firebaseモジュールを読込 -->
<script src="https://cdn.firebase.com/v0/firebase.js"></script>
<script src="https://cdn.firebase.com/libs/angularfire/0.7.1/angularfire.min.js"></script>
<!-- [c] - 見た目を調整 -->
<link rel="stylesheet" href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.0.4/css/bootstrap-combined.min.css">
<script src="project.js"></script>
<title>Wire up a Backend</title>
</head>
<body>
<h2>JavaScript Projects</h2>
<div ng-view></div><!-- [d] - ng-view属性を追加 -->
</body>
</html>
angularJS sample
=======================================
以下のブログ記事内で、解説してます
[公式サンプルから学ぶAngularJS (2)](http://1010real.hateblo.jp/entry/2014/05/08/162845)
// [a] - projectモジュールを定義。依存モジュールとしてngRouteおよびfirebaseを追加
angular.module('project', ['ngRoute', 'firebase'])
// [b] - firebaseサービスのURLを登録し、fbURLでアクセス可能にします。
// ※ここは自分で登録したFirebaseのURLに差し替えてください
.value('fbURL', 'https://intense-fire-7044.firebaseio.com/angularSample3/')
// [c] Firebaseサービスのインスタンスを返す関数を登録
.factory('Projects', function($firebase, fbURL) {
return $firebase(new Firebase(fbURL));
})
// [d] ngRouteモジュールの設定
.config(function($routeProvider) {
$routeProvider
.when('/', {
controller:'ListCtrl',
templateUrl:'list.html'
})
.when('/edit/:projectId', {
controller:'EditCtrl',
templateUrl:'detail.html'
})
.when('/new', {
controller:'CreateCtrl',
templateUrl:'detail.html'
})
.otherwise({
redirectTo:'/'
});
})
// [e] 以降、各コントローラの挙動を定義
.controller('ListCtrl', function($scope, Projects) {
$scope.projects = Projects;
})
.controller('CreateCtrl', function($scope, $location, $timeout, Projects) {
$scope.save = function() {
Projects.$add($scope.project, function() {
$timeout(function() { $location.path('/'); });
})
$location.path('/');
};
})
.controller('EditCtrl', function($scope, $location, $routeParams, $firebase, fbURL) {
var projectUrl = fbURL + $routeParams.projectId;
$scope.project = $firebase(new Firebase(projectUrl));
$scope.destroy = function() {
$scope.project.$remove();
$location.path('/');
};
$scope.save = function() {
$scope.project.$save();
$location.path('/');
};
});
<input type="text" ng-model="search" class="search-query" placeholder="Search">
<table>
<thead>
<tr>
<th>Project</th>
<th>Description</th>
<th><a href="#/new"><i class="icon-plus-sign"></i></a></th><!-- [a] - ページ遷移しない様に、urlの最初に#をつける -->
</tr>
</thead>
<tbody>
<tr ng-repeat="project in projects | orderByPriority | filter:search | orderBy:'name'"><!-- [b] - フィルタ・ソート条件を指定 -->
<td><a href="{{project.site}}" target="_blank">{{project.name}}</a></td>
<td>{{project.description}}</td>
<td>
<a href="#/edit/{{project.$id}}"><i class="icon-pencil"></i></a>
</td>
</tr>
</tbody>
</table>
<form name="myForm">
<div class="control-group" ng-class="{error: myForm.name.$invalid && !myForm.name.$pristine}"><!-- [a1] - ng-class:エラー時にクラス変更 -->
<label>Name</label>
<input type="text" name="name" ng-model="project.name" required>
<span ng-show="myForm.name.$error.required && !myForm.name.$pristine" class="help-inline">Required {{myForm.name.$pristine}}</span><!-- [a2] - ng-show:エラー時のみ表示) -->
</div>
<div class="control-group" ng-class="{error: myForm.site.$invalid && !myForm.site.$pristine}">
<label>Website</label>
<input type="url" name="site" ng-model="project.site">
<span ng-show="myForm.site.$error.required && !myForm.site.$pristine" class="help-inline">Required</span><!-- [a3] - 必須項目チェック -->
<span ng-show="myForm.site.$error.url" class="help-inline">Not a URL</span><!-- [a4] - url形式かどうかをチェック -->
</div>
<label>Description</label>
<textarea name="description" ng-model="project.description"></textarea>
<br>
<a href="#/" class="btn">Cancel</a>
<!-- [a5] - ng-disabled:内容に不備がある場合にボタンをdisabled -->
<button ng-click="save()" ng-disabled="myForm.$invalid" class="btn btn-primary">Save</button>
<!-- [b] - project.$removeがあるか(=データが存在するか)により表示制御 -->
<button ng-click="destroy()" ng-show="project.$remove" class="btn btn-danger">Delete</button>
</form>