さんじゃらっと Angular JS

##AngularJSとは
JavascriptベースのMVCフレームワークです
私のようにJSのライブラリはjQueryくらいしか使ったことがない人だと、クライアントサイドなのにコントローラーなどがでてきて驚きます

##使う準備
####1.ライブラリの読み込み
[公式サイト](https://angularjs.org/)の「Download」から入手するか、googleapisなどから読み込む。

```lang:html
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0/angular.min.js"></script>
```

####2.宣言
あとはおまじないがひとつ
htmlタグに`ng-app`を追加する。これでhtmlタグで囲まれた部分にAngularJSを利用できます。
`ng-`はAngularJSを使う上でよく出てきます。

```lang:html
<html ng-app>
```
これでAngularJSを使う準備は完了です。
※`ng-app`はモジュールを設定する際に`ng-app="myApp"`のように使用します。


##文字列の埋め込み

`{{`と`}}`で囲まれた文字列はHTMLそのまま表示されます

```lang:index.html
<!DOCTYPE html>
   <html ng-app>
   <head>
     <meta charset="utf-8">
     <script type="text/javascript" src="js/angular.js"></script>
   </head>
   <body>
   {{'Hello, AngularJS!'}}
   </body>
</html>
```

##変数の展開
`{{`と`}}`では変数を展開したり、式を評価することもできます

```lang:index.html
<!DOCTYPE html>
   <html ng-app>
   <head>
     <meta charset="utf-8">
     <script type="text/javascript" src="js/angular.js"></script>
   </head>
     <body>
       <div ng-init="variable=42" />
       <div>
        {{variable}}
       </div>
       <div>
        {{ 1 + 1 }}
       </div>
   </body>
</html>
```

##コントローラー
HTMLファイルでコントローラーを指定し、JSファイルでコントローラとスコープを宣言することでJSとHTMLを紐付けて変数や関数を利用できます

``` lang:index.html
<!doctype html>
<html lang="ja" ng-app>
<head>
  <meta charset="UTF-8">
  <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.0-beta.6/angular.js"></script>
  <script type="text/javascript" src="app.js"></script>
</head>
<body>
  <div>
    <div ng-controller="FirstCtrl">
      <div>{{message}}</div>
      <button ng-click="action()">push</button>
    </div>
  </div>
</body>
</html>
```

```lang:app.js
function FirstCtrl ($scope) {
    $scope.message = 'Hello! World!!!';
    $scope.action = function () {
       $scope.message = 'Goodbye, Angular!!!';
    };
}
```

##モデル
Inputタグにng-model属性を宣言すると、インタラクティブに変数を変更することができます。

```index.html
<!DOCTYPE html>
<html ng-app>
<head>
  <meta charset="utf-8">
  <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.0-beta.6/angular.js"></script>
</head>
<body>
　<input type="text" ng-model="message">
　　<div>
  　　{{message}}
　　</div>
　</body>
</html>
```

##イベント
AngularJSでイベントを貼るには`ng-***="func()"`のような属性を、イベントを設定したい要素に追加します。

```lang:index.html
￼￼￼￼￼￼￼￼￼￼￼￼￼￼￼￼￼￼￼￼￼￼￼<!DOCTYPE html>
<html lang="ja" ng-app>
<head>
  <meta charset="UTF-8">
  <title>ng-dblclick</title>
  <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.0-beta.6/angular.js"></script>
</head>
<body>
  <button ng-dblclick="dblClick=!dblClick">ダブルクリック</button>
  <div ng-show="dblClick">ダブルクリックされました！</div>
</body>
</html>
```

##フィルター
AngularJSでは多くのフィルターが用意されていて、`{{モデル名 | フィルター名}}`で多くのフォーマットに変換できます。

```lang:index.html

<!DOCTYPE html>
<html lang="ja" ng-app="myApp">
<head>
  <meta charset="UTF-8">
  <title>date</title>
  <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.0-beta.6/angular.js"></script>
</head>
<body ng-controller="myController">
<p>時：{{ today | date: 'yyyy年MM月dd日 HH時MM分ss.sss秒' }}</p>
<p>金：{{ 1000000 | currency }}</p>
<script>
  angular.module('myApp', []).controller('myController', ['$scope', function ($scope) {
    $scope.today = new Date();
  }]);
</script>
</body>
</html>
```


投稿フォームなどに使える機能は
[さんじゃらっと Angular JS part2](http://qiita.com/araya/items/8f18aa1af12375575ea3)で