SlideShare a Scribd company logo
javascriptのフレームワークについて(仮)

       FAGA (@Hivesbee)
Angular.jsについてちょっとしゃべる

     FAGA (@Hivesbee)
自己紹介
• 名前:FAGA
• TwitterID:@Hivesbee
  ※有益な情報はつぶやいていないです
• Web : http://nethive.info
  ※VPSのお金を払い忘れたため停止中

• 某企業で働いている(たぶん)社畜社会人
• ちょっとプログラムがすきな一般人

 2012/12/22   プログラミング生放送勉強会 第19回@品川   3
Angular.js概要
• Javascriptのフレームワークの一つ
• Googleが作成
• MVCパターンを採用

• 最初「アンギャー」と読んでしまいそうになった

今日は超簡単なサンプルコードを見せつつ、
Angular.jsの機能についてしゃべっていきます

 2012/12/22   プログラミング生放送勉強会 第19回@品川   4
データバインド
例:入力した名前を逐次表示
    <!DOCTYPE html>
                      Angular.jsアプリの宣言
    <html ng-app>                                Angular.jsの読み込み
      <head>
        <script src="angular.min.js"></script>
      </head>
                                                ng-modelの宣言
      <body>
        <div>
          <input type="text" ng-model="name"><br>
          こんにちは! {{ name }}!
        </div>
      </body>                               ng-modelとのバインド
    </html>



 2012/12/22            プログラミング生放送勉強会 第19回@品川                       5
データバインド
• {{ }} の中には単純な演算しか入らない
  (文字列の結合とか)

• ng-modelの値に応じて処理を変更したいときは?
  →ng-controllerを定義し、その中で処理を書く




 2012/12/22   プログラミング生放送勉強会 第19回@品川   6
ng-controller
例:入力した名前に応じて応答が変わる
    <!DOCTYPE html>
    <html ng-app>
      ・・・                          Controller定義
      <script>
        function testCtrl($scope) {
          $scope.isFAGA = function() {
             return $scope.name == “FAGA” ? "クズ“ : $scope.name;
          }
        }                 isFAGA定義
      </script>
      <body>                                   Controller使用を宣言
        <div ng-controller=“testCtrl">
          <input type="text" ng-model="name"><br>
          こんにちは! {{ isFAGA() }}!
        </div>
      </body>                                    isFAGAをバインド
    </html>
 2012/12/22            プログラミング生放送勉強会 第19回@品川                      7
ng-controller
何が起きているかというと
<!DOCTYPE html>
<html ng-app>                                      Root Scope
  ・・・
  <script>
                                     暗黙の
    function testCtrl($scope) {      宣言
      $scope.isFAGA = function() {
         ・・・                                               継承
      }
    }                                       元ネタ
  </script>
  <body>                                           testCtrl Scope
    <div ng-controller=“testCtrl">
                                                 isFAGA : function
      <input type="text“
        ng-model="name"><br>         暗黙の            name : String
      こんにちは! {{ isFAGA() }}!
    </div>
                                     宣言
  </body>
</html>             Template                                  Model
 2012/12/22              プログラミング生放送勉強会 第19回@品川                       8
scope
• そのControllerが制御できる範囲
  範囲はTemplateのDOM構造と一致

  – ng-controller=“testCtrl” を
   宣言したdiv内を制御

  – スコープ内に変数・関数を宣言し、
    Templateに反映可能
    (ajax通信でもらったデータをtemplateに反映、など)


 2012/12/22   プログラミング生放送勉強会 第19回@品川   9
リスト
• 本・メール・etc… を一覧で表示・検索したい
  →ng-repeat・filterで実現
    Controller
    function fooCtrl($scope) {
      $scope.array = [“A”, “B”, “C”];               JSON形式で記載
    }

    Template
    <input type=“text” ng-model=“query”>
    <ul ng-repeat=“item in array | filter : query”>
      <li> {{ item }} </li>
    </ul>

              foreach 風にng-repeatを記載       検索フィルタの設定

 2012/12/22                 プログラミング生放送勉強会 第19回@品川               10
リスト
何が起きているかというと
Controller
function fooCtrl($scope) {                             fooCtrl Scope
  $scope.array = [“A”,“B”,“C”];                         array : array
}
                                      元ネタ              query : String


                                                                継承

                                                     Repeater Scope
Template                                              Repeater Scope
                                                      item : String
                                                        Repeater Scope
<input type=“text” ng-model=“query”>                    item : String
<ul ng-repeat=“item in array | filter : query”>           item : String
  <li> {{ item }} </li>
</ul>
                                                                    Model
  2012/12/22                 プログラミング生放送勉強会 第19回@品川                        11
ルーティング
• 画面の切り替え
Template
<!DOCTYPE html>
<html ng-app="demo">          ng-appに名前が付いた
  <head>
    <script src="js/angular.min.js"></script>
    <script src=“js/app.js”></script>
</head>
                                      ルーティング用javascript
  <script>
    function ACtrl($scope) {}
    function BCtrl($scope) {}
  </script>
  <body>
    <a href="#/A">Aへ</a><br>
    <a href="#/B">Bへ</a><br>        ng-viewの属性追加
    <div ng-view></div>        ※この中で画面が切り替わる
  </body>
</html>
  2012/12/22         プログラミング生放送勉強会 第19回@品川                12
ルーティング
• 画面の切り替え
                ng-app名を指定

app.js
angular.module("demo", []).
     config(["$routeProvider", function($routeProvider) {
        $routeProvider.
          when(“/A", {templateUrl : "A.html", controller : ACtrl}).
          when(“/B", {templateUrl : "B.html", controller : BCtrl}).
          otherwise({redirectTo : "/A"});
   }]);

                  whenで正常時の画面遷移、
               otherwiseでwhere以外の画面遷移

                                         A.htmlとB.htmlは作成済みとします
  2012/12/22           プログラミング生放送勉強会 第19回@品川                     13
ほかにも
• 独自のタグ生成
  → 部品として取り扱うことが可能

• e2e-testing
  → 楽にAngular.jsのシナリオテストができる




 2012/12/22   プログラミング生放送勉強会 第19回@品川   14
まとめ
• コード量が少なくても強力なアプリ開発可能
• TemplateとControllがDOM構造で
  一致しているため直感的に理解しやすい
• ルーティングが分かりやすすぎて感動

• htmlに独自属性が乱立するため抵抗があるかも
• 日本語リファレンスはよ



 2012/12/22   プログラミング生放送勉強会 第19回@品川   15

More Related Content

PPTX
AngularJS入門
PPTX
エンタープライズ分野での実践AngularJS
PDF
AngularJSでの非同期処理の話
PDF
AngularJSの高速化
PDF
React.jsでクライアントサイドなWebアプリ入門
PPTX
Windows ストアアプリのgrid viewを入門してみた
PPTX
AngularJSを浅めに紹介します
PDF
React+TypeScriptもいいぞ
AngularJS入門
エンタープライズ分野での実践AngularJS
AngularJSでの非同期処理の話
AngularJSの高速化
React.jsでクライアントサイドなWebアプリ入門
Windows ストアアプリのgrid viewを入門してみた
AngularJSを浅めに紹介します
React+TypeScriptもいいぞ

What's hot (20)

PPTX
今からでも遅くない! React事始め
PPTX
まだDOM操作で消耗してるの?
PDF
受託開発でのAngularJS - 第1回AngularJS 勉強会 at LIG
PDF
Vue入門
PPTX
簡単AngularJS(関西AngularJS勉強会)
PDF
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
PPTX
20160927 reactmeetup
PDF
JavaFX 2.0 - リッチクライアントのためのUI基盤
PDF
AngularJSについて
PDF
Vue.jsでさくっとMVVM
PDF
Viewを活用して複雑化と戦う
PDF
From Swing to JavaFX - SwingからJavaFXへのマイグレーションガイド
PDF
Scene BuilderでFXML
PDF
ng-mtg#6 AngularJS ディレクティブ・パターン
PPTX
ASP.NET MVCとEntity Frameworkで作ってみた
PPT
ASP.NET MVC 1.0
PDF
jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発
KEY
EC-CUBEプラグイン講義
PDF
3分でわかるangular js
PDF
はじめよう Backbone.js
今からでも遅くない! React事始め
まだDOM操作で消耗してるの?
受託開発でのAngularJS - 第1回AngularJS 勉強会 at LIG
Vue入門
簡単AngularJS(関西AngularJS勉強会)
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
20160927 reactmeetup
JavaFX 2.0 - リッチクライアントのためのUI基盤
AngularJSについて
Vue.jsでさくっとMVVM
Viewを活用して複雑化と戦う
From Swing to JavaFX - SwingからJavaFXへのマイグレーションガイド
Scene BuilderでFXML
ng-mtg#6 AngularJS ディレクティブ・パターン
ASP.NET MVCとEntity Frameworkで作ってみた
ASP.NET MVC 1.0
jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発
EC-CUBEプラグイン講義
3分でわかるangular js
はじめよう Backbone.js
Ad

Similar to Angular.jsについてちょっとしゃべる (20)

PDF
AngularJSでwebアプリを作ってみた!(2014/6/8 GDGKobe)
PDF
HTML5 ビギナーのための AngularJS
PDF
20140823 LL diver Angular.js で構築した note に関して
PDF
AngularJS 概説
ODP
AngularJSとの危険な関係 by Mario Heiderich - CODE BLUE 2015
PDF
AngularJS入門の巻2
PDF
AngularJS入門の巻
PPTX
シンプルな9つのサンプルで学ぶJava Script初心者のためのAngularJS超入門ハンズオン
PDF
あの時AngularJSと出会った僕らは
PPTX
20161125 米田 angular_jsを触ってみた
PPTX
AngularJS 入門
PPTX
Angular js はまりどころ
PDF
ngJapan報告会
PDF
Angular js meets cakephp at cloud on the beach 2014 前夜祭
PPTX
Angular jsとsinatraでturbolinks
PPTX
Angular JSを始めよう!
PDF
angularJS in 10ish minutes
PDF
Backbone.js
PDF
traceur-compilerで未来のJavaScriptを体験
PPTX
忙しい人のためのBackbone.jsとAngular.js入門
AngularJSでwebアプリを作ってみた!(2014/6/8 GDGKobe)
HTML5 ビギナーのための AngularJS
20140823 LL diver Angular.js で構築した note に関して
AngularJS 概説
AngularJSとの危険な関係 by Mario Heiderich - CODE BLUE 2015
AngularJS入門の巻2
AngularJS入門の巻
シンプルな9つのサンプルで学ぶJava Script初心者のためのAngularJS超入門ハンズオン
あの時AngularJSと出会った僕らは
20161125 米田 angular_jsを触ってみた
AngularJS 入門
Angular js はまりどころ
ngJapan報告会
Angular js meets cakephp at cloud on the beach 2014 前夜祭
Angular jsとsinatraでturbolinks
Angular JSを始めよう!
angularJS in 10ish minutes
Backbone.js
traceur-compilerで未来のJavaScriptを体験
忙しい人のためのBackbone.jsとAngular.js入門
Ad

Angular.jsについてちょっとしゃべる

  • 3. 自己紹介 • 名前:FAGA • TwitterID:@Hivesbee ※有益な情報はつぶやいていないです • Web : http://nethive.info ※VPSのお金を払い忘れたため停止中 • 某企業で働いている(たぶん)社畜社会人 • ちょっとプログラムがすきな一般人 2012/12/22 プログラミング生放送勉強会 第19回@品川 3
  • 4. Angular.js概要 • Javascriptのフレームワークの一つ • Googleが作成 • MVCパターンを採用 • 最初「アンギャー」と読んでしまいそうになった 今日は超簡単なサンプルコードを見せつつ、 Angular.jsの機能についてしゃべっていきます 2012/12/22 プログラミング生放送勉強会 第19回@品川 4
  • 5. データバインド 例:入力した名前を逐次表示 <!DOCTYPE html> Angular.jsアプリの宣言 <html ng-app> Angular.jsの読み込み <head> <script src="angular.min.js"></script> </head> ng-modelの宣言 <body> <div> <input type="text" ng-model="name"><br> こんにちは! {{ name }}! </div> </body> ng-modelとのバインド </html> 2012/12/22 プログラミング生放送勉強会 第19回@品川 5
  • 6. データバインド • {{ }} の中には単純な演算しか入らない (文字列の結合とか) • ng-modelの値に応じて処理を変更したいときは? →ng-controllerを定義し、その中で処理を書く 2012/12/22 プログラミング生放送勉強会 第19回@品川 6
  • 7. ng-controller 例:入力した名前に応じて応答が変わる <!DOCTYPE html> <html ng-app> ・・・ Controller定義 <script> function testCtrl($scope) { $scope.isFAGA = function() { return $scope.name == “FAGA” ? "クズ“ : $scope.name; } } isFAGA定義 </script> <body> Controller使用を宣言 <div ng-controller=“testCtrl"> <input type="text" ng-model="name"><br> こんにちは! {{ isFAGA() }}! </div> </body> isFAGAをバインド </html> 2012/12/22 プログラミング生放送勉強会 第19回@品川 7
  • 8. ng-controller 何が起きているかというと <!DOCTYPE html> <html ng-app> Root Scope ・・・ <script> 暗黙の function testCtrl($scope) { 宣言 $scope.isFAGA = function() { ・・・ 継承 } } 元ネタ </script> <body> testCtrl Scope <div ng-controller=“testCtrl"> isFAGA : function <input type="text“ ng-model="name"><br> 暗黙の name : String こんにちは! {{ isFAGA() }}! </div> 宣言 </body> </html> Template Model 2012/12/22 プログラミング生放送勉強会 第19回@品川 8
  • 9. scope • そのControllerが制御できる範囲 範囲はTemplateのDOM構造と一致 – ng-controller=“testCtrl” を 宣言したdiv内を制御 – スコープ内に変数・関数を宣言し、 Templateに反映可能 (ajax通信でもらったデータをtemplateに反映、など) 2012/12/22 プログラミング生放送勉強会 第19回@品川 9
  • 10. リスト • 本・メール・etc… を一覧で表示・検索したい →ng-repeat・filterで実現 Controller function fooCtrl($scope) { $scope.array = [“A”, “B”, “C”]; JSON形式で記載 } Template <input type=“text” ng-model=“query”> <ul ng-repeat=“item in array | filter : query”> <li> {{ item }} </li> </ul> foreach 風にng-repeatを記載 検索フィルタの設定 2012/12/22 プログラミング生放送勉強会 第19回@品川 10
  • 11. リスト 何が起きているかというと Controller function fooCtrl($scope) { fooCtrl Scope $scope.array = [“A”,“B”,“C”]; array : array } 元ネタ query : String 継承 Repeater Scope Template Repeater Scope item : String Repeater Scope <input type=“text” ng-model=“query”> item : String <ul ng-repeat=“item in array | filter : query”> item : String <li> {{ item }} </li> </ul> Model 2012/12/22 プログラミング生放送勉強会 第19回@品川 11
  • 12. ルーティング • 画面の切り替え Template <!DOCTYPE html> <html ng-app="demo"> ng-appに名前が付いた <head> <script src="js/angular.min.js"></script> <script src=“js/app.js”></script> </head> ルーティング用javascript <script> function ACtrl($scope) {} function BCtrl($scope) {} </script> <body> <a href="#/A">Aへ</a><br> <a href="#/B">Bへ</a><br> ng-viewの属性追加 <div ng-view></div> ※この中で画面が切り替わる </body> </html> 2012/12/22 プログラミング生放送勉強会 第19回@品川 12
  • 13. ルーティング • 画面の切り替え ng-app名を指定 app.js angular.module("demo", []). config(["$routeProvider", function($routeProvider) { $routeProvider. when(“/A", {templateUrl : "A.html", controller : ACtrl}). when(“/B", {templateUrl : "B.html", controller : BCtrl}). otherwise({redirectTo : "/A"}); }]); whenで正常時の画面遷移、 otherwiseでwhere以外の画面遷移 A.htmlとB.htmlは作成済みとします 2012/12/22 プログラミング生放送勉強会 第19回@品川 13
  • 14. ほかにも • 独自のタグ生成 → 部品として取り扱うことが可能 • e2e-testing → 楽にAngular.jsのシナリオテストができる 2012/12/22 プログラミング生放送勉強会 第19回@品川 14
  • 15. まとめ • コード量が少なくても強力なアプリ開発可能 • TemplateとControllがDOM構造で 一致しているため直感的に理解しやすい • ルーティングが分かりやすすぎて感動 • htmlに独自属性が乱立するため抵抗があるかも • 日本語リファレンスはよ 2012/12/22 プログラミング生放送勉強会 第19回@品川 15