SlideShare a Scribd company logo
AngularJSについて
2014.1.23 ナビプラス株式会社 高橋昌生
目次
●
●
●
●
●

AngularJSとは
AngularJSの特徴
AngularJSの使いどころ
jQueryとの比較
サンプルコードいくつか
AngularJSとは
● Googleが開発しているJavaScriptライブラリ
○ http://www.angularjs.org

● クライアントサイドMVCフレームワーク
● なんだか最近流行の兆し
○

http://www.google.co.jp/trends/explore#q=AngularJS%2C%
20Backbone.js%2C%20Knockout.js&cmpt=q
AngularJSの特徴
● データバインディングによるModelとViewの自
動同期
● HTMLをテンプレートとして使う
● JSのコードとHTMLが密結合しない
● 特に何かを継承したりしていない、ただの関数
をControllerとして使用する
● Dependency Injection
AngularJSの使いどころ
● CRUDアプリ作成には強そう
○ 管理画面とか

● jQueryでごりごり書いていくよりも、保守性は高
くなりそう
● ゲームでCanvasに描画しまくるとかそういう用
途向きではない
jQueryとの比較
● jQueryの流行以来、動的なページ作成には
jQueryが定番
● jQueryで行うのは、DOM操作の敷居を下げた
開発
● AngularJSで行うのは、DOM操作をほとんど意
識しない開発
サンプルコード
いくつか例を見ながら概要を掴んでいきます
Sample1: Hello World
<!DOCTYPE html>
<html ng-app=”helloApp”>
<head>
<script src=”https://ajax.googleapis.com/ajax/libs/angularjs/1.2.9/angular.min.js”></script>
<script src=”app.js”></script>
</head>
<body>
<div ng-controller=”helloCtrl”>
<input type=”text” ng-model=”name”>
Hello, {{name}}!
</div>
</body>
</html>
Sample1: Hello World
<!DOCTYPE html>
<html ng-app=”helloApp”> 配下の要素に AngularJSが適用される (htmlタグにつけると、全体 )
<head>
<script src=”https://ajax.googleapis.com/ajax/libs/angularjs/1.2.9/angular.min.js”></script>
<script src=”app.js”></script>
</head>
<body>
<div ng-controller=”helloCtrl”>
<input type=”text” ng-model=”name”>
Hello, {{name}}!
</div>
</body>
</html>
Sample1: Hello World
<!DOCTYPE html>
<html ng-app=”helloApp”>
<head>
<script src=”https://ajax.googleapis.com/ajax/libs/angularjs/1.2.9/angular.min.js”></script>
<script src=”app.js”></script>
</head>
<body>
<div ng-controller=”helloCtrl”>

このdivタグ配下では helloCtrl controllerを使用

<input type=”text” ng-model=”name”>
Hello, {{name}}!
</div>
</body>
</html>
Sample1: Hello World
<!DOCTYPE html>
<html ng-app=”helloApp”>
<head>
<script src=”https://ajax.googleapis.com/ajax/libs/angularjs/1.2.9/angular.min.js”></script>
<script src=”app.js”></script>
</head>
<body>
<div ng-controller=”helloCtrl”>
<input type=”text” ng-model=”name”>
Hello, {{name}}!
</div>
</body>
</html>

双方向データバインド
Sample1: Hello World
<!DOCTYPE html>
<html ng-app=”helloApp”>
<head>
<script src=”https://ajax.googleapis.com/ajax/libs/angularjs/1.2.9/angular.min.js”></script>
<script src=”app.js”></script>
</head>
<body>
<div ng-controller=”helloCtrl”>
<input type=”text” ng-model=”name”>
Hello, {{name}}!
</div>
</body>
</html>

データバインド
Sample1: Hello World
app.js

// 最小限の場合、これでもいい
/*
var HelloCtrl = function($scope) {
$scope.name = 'World';
}
*/
// angularからHelloCtrlに$scopeサービスを注入する
// 詳しくはAngularJSのDIに関する解説を参照
var helloApp = angular.module('helloApp', []);
helloApp.controller('HelloCtrl', ['$scope', function($scope){
$scope.name = 'World';
}]);
jQueryでやると
<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="jq_app.js"></script>
</head>
<body>
<div>
<input type="text" name="test" id="test"><br>
Hello, <span id="foo"></span>
</div>
</body>
</html>
jQueryでやると
(function($){
$(function(){
$("#test").keyup(function(){
$("#foo").text($("#test").val());
});
});
})(jQuery);
Sample2:繰り返し
<!DOCTYPE html>
<html ng-app=”iterApp”>
<head>
<script src=”https://ajax.googleapis.com/ajax/libs/angularjs/1.2.9/angular.min.js”></script>
<script src=”iter_app.js”></script>
</head>
<body>
<div ng-controller=”IterCtrl”>
<ul ng-repeat=”element in elements”>
<li>{{element}}</li>
</ul>
</body>
</html>
Sample2:繰り返し
var iterApp = angular.module('iterApp', []);
iterApp.controller('IterCtrl', ['$scope', function($scope){
$scope.elements =[‘い’, ‘ろ’, ‘は’];
}]);
Sample3:
クライアントサイドバリデーション
<form method="post" name="registration">
<dl>
<dt>ユーザ名</dt>
<dd>
<input type="text" name="userName" ng-model="userName" required ng-maxlength=10>
<span ng-show="registration.userName.$error.required">ユーザ名を入力してください</span>
<span ng-show="registration.userName.$error.maxlength">ユーザ名は最大10文字です</span>
<span ng-show="registration.userName.$valid">OK</span>
</dd>
Sample3:クライアントサイドバリデーショ
ン
<dt>パスワード</dt>
<dd>
<input type="password" name="password" ng-model="password" required ng-minlength=7>
<span ng-show="registration.password.$error.required">パスワードを入力してください</span>
<span ng-show="registration.password.$error.minlength">パスワードは7文字以上で設定してください</span>
<span ng-show="registration.password.$valid">OK</span>
</dd>
</dl>
<input type="submit" value="登録" ng-disabled="registration.$invalid">
</form>
Sample4:
サーバサイドアプリと組み合わせ
● Play-AngularJS-Sample
○ https://github.com/tarhashi/Play-AngularJS-Sample
○ www.angularjs.orgのtodoアプリに永続化をつけた程度
のアプリ
○ サーバサイドは以下の構成
■ APP: Play Framework2 (Scala)
■ DB: H2
○ PlayのJSRouterを使うためにajax処理をjQueryでやっ
てるので$applyが必要になってる
AngularJS + サーバサイド開発の特徴
● サーバサイドの大部分はJSON API
○ サーバサイドは単純に入出力だけ考えてればOK
○ WEB画面とスマホアプリでAPIを使いまわしたりできる
かも
組み込みモジュールでは機能が足りない
場合
● 追加モジュールを読み込んで拡張
○ 公式モジュール http://code.angularjs.org/1.2.9/
○ いろいろありそうなところ http://ngmodules.org

● ディレクティブを定義して自分で拡張
○ http://angularjsninja.
com/blog/2013/11/20/angularjs-customdirectives/
その他の話題
● Dependency Injection
○ http://qiita.com/kawaz/items/363f430d21ec729f1b7d

● Testing
○ http://js.studio-kingdom.
com/angularjs/guide/unit_testing

● Routing, filter
○ http://qiita.
com/lga0503/items/1f473994ed5a3120aef8
参考
● Mastering Web Application Development with
AngularJS
○ http://www.packtpub.com/angularjs-web-applicationdevelopment/book
● AngularJS API Docs
○ http://docs.angularjs.org/api
● Qiita
○ http://qiita.com/tags/angularjs

More Related Content

PDF
受託開発でのAngularJS - 第1回AngularJS 勉強会 at LIG
PDF
ng-mtg#6 AngularJS ディレクティブ・パターン
PPTX
AngularJSを浅めに紹介します
PPTX
エンタープライズ分野での実践AngularJS
PPTX
Angular js開発事例
PDF
そろそろ押さえておきたい AngularJSのセキュリティ
PDF
Enterprise x AngularJS
PDF
angular X designer - デザイナからみたAngularJS #ten1club
受託開発でのAngularJS - 第1回AngularJS 勉強会 at LIG
ng-mtg#6 AngularJS ディレクティブ・パターン
AngularJSを浅めに紹介します
エンタープライズ分野での実践AngularJS
Angular js開発事例
そろそろ押さえておきたい AngularJSのセキュリティ
Enterprise x AngularJS
angular X designer - デザイナからみたAngularJS #ten1club

What's hot (20)

PDF
Angular1&2
PDF
開発ライフサイクルから見たAngularJS
PDF
AngularJS 概説
PDF
Angular#Kanazawa
PPTX
React を導入した フロントエンド開発
PDF
3分でわかるangular js
PPTX
簡単AngularJS(関西AngularJS勉強会)
PDF
angular1脳で見るangular2
PDF
React.js + Flux
PDF
jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発
PPTX
AngularJS入門
PPTX
Visual studio 2013 Overview
PPTX
Windows アプリケーション開発 はじめに ~ Windows アプリケーション開発初学者の方向け Visual Studio を使ったアプリケーショ...
PDF
ASP.NET MVC と jQuery で実践する標準志向 Web 開発
PPTX
【DroidKaigi2015】初学者に嬉しいAndroid開発環境(あとMVCとか)
PPTX
Xamarin.formsでのmvvm利用のコツ
KEY
MVCもやもや話
PDF
イベント駆動AngularJS / 今から書くAngular 2.0
PPTX
Windows ストア アプリの上手な作り方
PDF
AngularJSからReactに移ったケースの話
Angular1&2
開発ライフサイクルから見たAngularJS
AngularJS 概説
Angular#Kanazawa
React を導入した フロントエンド開発
3分でわかるangular js
簡単AngularJS(関西AngularJS勉強会)
angular1脳で見るangular2
React.js + Flux
jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発
AngularJS入門
Visual studio 2013 Overview
Windows アプリケーション開発 はじめに ~ Windows アプリケーション開発初学者の方向け Visual Studio を使ったアプリケーショ...
ASP.NET MVC と jQuery で実践する標準志向 Web 開発
【DroidKaigi2015】初学者に嬉しいAndroid開発環境(あとMVCとか)
Xamarin.formsでのmvvm利用のコツ
MVCもやもや話
イベント駆動AngularJS / 今から書くAngular 2.0
Windows ストア アプリの上手な作り方
AngularJSからReactに移ったケースの話
Ad

Similar to AngularJSについて (20)

PPTX
AngularJSを触ってみた
PDF
AngularJSで業務システムUI部品化
PDF
作って分かるKnockoutJS@ALM11月
PDF
今後のWeb開発の未来を考えてangular jsにしました(拡大版)
PDF
俺とAngular JS 2
PPTX
【eLV勉強会】AngularJSでのモバイルフロントエンド開発
PPTX
JavaScript(AngularJS・React.js)で作る iOS・Androidアプリハンズオン
PDF
Ng mtg#3
PDF
今度こそ始めるjQuery超入門
PDF
Alt01-LT
PPTX
Angular jsとsinatraでturbolinks
PDF
Angular 4がやってくる!? 新機能ダイジェスト
PDF
AngularJS x Chrome Apps (2014.08.23 #gdgkobe event)
PDF
Angular jsの継続的なバージョンアップ
PDF
はじめてのVue.js
PDF
今後のWeb開発の未来を考えてangularJSにしました
PDF
One-time Binding & $digest
PDF
AngularJS で ハイスピードSI
PDF
Angular2
PDF
jQueryを中心としたJavaScript
AngularJSを触ってみた
AngularJSで業務システムUI部品化
作って分かるKnockoutJS@ALM11月
今後のWeb開発の未来を考えてangular jsにしました(拡大版)
俺とAngular JS 2
【eLV勉強会】AngularJSでのモバイルフロントエンド開発
JavaScript(AngularJS・React.js)で作る iOS・Androidアプリハンズオン
Ng mtg#3
今度こそ始めるjQuery超入門
Alt01-LT
Angular jsとsinatraでturbolinks
Angular 4がやってくる!? 新機能ダイジェスト
AngularJS x Chrome Apps (2014.08.23 #gdgkobe event)
Angular jsの継続的なバージョンアップ
はじめてのVue.js
今後のWeb開発の未来を考えてangularJSにしました
One-time Binding & $digest
AngularJS で ハイスピードSI
Angular2
jQueryを中心としたJavaScript
Ad

AngularJSについて