ISBN: 978-4-7741-9130-0
Angularアプリケーションプログラミング
| 著者 | 山田祥寛 |
|---|---|
| 出版社 | 技術評論社 |
| 価格 | 3,700円(税別) |
| 判型 | B5変判・1色 |
| ページ数 | 512ページ |
| 発売日 | 2017年8月4日 |
| シリーズ | アプリケーションプログラミング |
| 対象レベル | 中級 |
定番JavaScriptフレームワークを学ぶ
データバインディング、コンポーネント、依存性注入などの基本から、ディレクティブ/パイプ/サービスの自作やテスト、さらに、Angular CLIやngx-bootstrapなど関連ツール、ライブラリといった応用分野まで網羅します。最新Angular 4に対応し、今後のアップグレードにも留意した解説を行っています。
Angularによる動的Webアプリ開発に必要な知識が、この1冊で身に付きます。
更新履歴
- FAQ情報:2022年6月13日 更新
- 正誤訂正:2018年11月27日 更新
目次
- 第1章 イントロダクション
- 1.1 JavaScriptの歴史
- 1.1.1 不遇の時代を経てきた JavaScript
- 1.1.2 復権のきっかけは Ajax、そして HTML5 の時代へ
- 1.1.3 JavaScript ライブラリから JavaScript フレームワークへ
- 1.2 フレームワークとは?
- 1.2.1 フレームワークの本質
- 1.2.2 フレームワーク導入の利点
- 1.2.3 JavaScript で利用可能なフレームワーク
- 1.3 Angular の特徴
- 1.3.1 Angular のバージョン
- 第2章 Angular の基本
- 2.1 Angularを利用するための準備
- 2.1.1 Angular アプリの基本構造
- 2.2 サンプルアプリの内容を確認する
- 2.2.1 Angular アプリの構成部品を束ねる — モジュール
- 2.2.2 ページを構成する UI 部品を定義する — コンポーネント
- 2.2.3 Angular アプリを起動するためのスタートアップコード — main.ts
- 2.2.4 メインページの準備 — index.html
- 2.3 基本ライブラリの挙動を宣言する — 設定ファイル
- 2.3.1 アプリで利用するライブラリ情報を管理する — package.json
- 2.3.2 TypeScript コンパイラーの挙動を設定する — tsconfig.json
- 2.3.3 SystemJS の挙動を宣言する — systemjs.config.js
- 2.4 学習を進める前に
- 2.4.1 サンプルファイルの入手
- 2.4.2 サンプルアプリの利用方法
- 第3章 データバインディング
- 3.1 データバインディングの基本
- 3.1.1 4 種類のバインディング構文
- 3.2 Interpolation(補間)構文
- 3.2.1 Interpolation の基本ルール
- 3.2.2 {{...}} 式の注意点
- 3.2.3 安全にプロパティ/メソッドにアクセスする — 「?.」演算子
- 3.3 プロパティバインディング
- 3.3.1 補足:プロパティバインディングの別構文
- 3.3.2 要素に HTML 文字列をバインドする
- 3.3.3 補足:<iframe> 要素に外部リソースをバインドする
- 3.4 属性/クラス/スタイルバインディング
- 3.4.1 HTML 属性に値をバインドする — 属性バインディング
- 3.4.2 スタイルクラスを着脱する — クラスバインディング
- 3.4.3 スタイルプロパティを設定する — スタイルバインディング
- 3.5 イベントバインディング
- 3.5.1 イベントバインディングの基本
- 3.5.2 イベント情報を取得する — $event
- 3.5.3 テンプレート参照変数による入力値の取得
- 3.5.4 キーイベントのフィルタリング — keyup.enter イベント
- 3.6 双方向バインディング
- 3.6.1 双方向バインディングの基本
- 3.6.2 双方向バインディングのしくみ
- 3.6.3 補足:テキストボックスのデフォルト値
- 第4章 標準パイプ/ディレクティブ
- 4.1 パイプ
- 4.1.1 パイプの基本
- 4.1.2 文字列を大文字/小文字に整形する
- — lowercase/uppercase/titlecase
- 4.1.3 オブジェクトを JSON 形式に変換する — json
- 4.1.4 文字列から特定範囲の部分文字列を切り出す — slice(1)
- 4.1.5 配列から特定範囲の要素を取り出す — slice(2)
- 4.1.6 数値を桁区切り文字で整形して出力する — number
- 4.1.7 数値を通貨形式に整形する — currency
- 4.1.8 数値をパーセント形式に整形する — percent
- 4.1.9 日付/時刻を整形する — date
- 4.1.10 数値によって表示文字列を変化させる — i18nPlural
- 4.1.11 文字列に応じて出力を切り替える — i18nSelect
- 4.2 ディレクティブ
- 4.2.1 式の真偽によって表示/非表示を切り替える — ngIf
- 4.2.2 条件式を満たさない場合の出力を指定する — ngIf(else)
- 4.2.3 式の値によって表示を切り替える — ngSwitch
- 4.2.4 配列をループ処理する — ngFor
- 4.2.5 要素にスタイルプロパティを付与する — ngStyle
- 4.2.6 スタイルクラスを着脱する — ngClass
- 4.2.7 数値に応じて出力を切り替える — ngPlural
- 4.2.8 用意されたテンプレートの内容をインポートする
- — ngTemplateOutlet
- 4.2.9 コンポーネントを動的にインポートする — ngComponentOutlet
- 第5章 フォーム開発
- 5.1 フォーム開発の基本
- 5.1.1 基本的なフォーム
- 5.2 フォームの構成要素
- 5.2.1 フォームの状態を検知する
- 5.2.2 ラジオボタンを設置する
- 5.2.3 チェックボックスを設置する
- 5.2.4 選択ボックスを設置する
- 5.3 フォーム開発に役立つミニサンプル集
- 5.3.1 文字数カウント機能付きのテキストエリアを設置する
- 5.3.2 テキストボックスの内容を区切り文字で分割する
- 5.3.3 ファイルをアップロードする
- 5.4 モデル駆動型のフォーム
- 5.4.1 ReactiveFormsModule モジュールの有効化
- 5.4.2 モデル駆動型フォームの基本
- 5.4.3 補足:group メソッドとプロパティ定義は両方必要?
- 第6章 コンポーネント開発
- 6.1 複数コンポーネントの連携
- 6.1.1 コンポーネントを入れ子に配置する — @Input デコレーター
- 6.1.2 子コンポーネントからイベントを受け取る — @Output デコレーター
- 6.1.3 補足:テンプレート参照変数による子コンポーネントの参照
- 6.1.4 モジュールの分離
- 6.2 コンポーネントのライフサイクル
- 6.2.1 ライフサイクルメソッドの確認
- 6.2.2 ページの初期化/終了処理を実施する — ngOnInit/ngOnDestroy
- 6.2.3 入力プロパティの変更を検知する — ngOnChanges
- 6.2.4 ビューの初期化/変更時の処理を実装する
- — ngAfterViewInit/ngAfterViewChecked
- 6.2.5 コンポーネント配下のコンテンツをテンプレートに反映させる
- —
- 6.2.6 外部コンテンツの初期化/変更時の処理を実装する
- — ngAfterContentInit/ngAfterContentChecked
- 6.3 コンポーネントのスタイル定義
- 6.3.1 コンポーネントスタイルの定義
- 6.3.2 補足:スタイルカプセル化のしくみ
- 6.3.3 コンポーネントスタイルを定義する方法
- 6.3.4 コンポーネントスタイルで利用できる特殊セレクター
- 6.3.5 カプセル化の挙動を変更する — encapsulation パラメーター
- 6.4 アニメーション機能
- 6.4.1 アニメーション機能を利用するための準備
- 6.4.2 アニメーションの基本
- 6.4.3 状態/遷移のさまざまな設定方法
- 6.4.4 アニメーションの前後で任意の処理を実行する
- — アニメーションコールバック
- 6.5 コンポーネントのその他の話題
- 6.5.1 テンプレートの外部ファイル化 — templateUrl パラメーター
- 6.5.2 テンプレート構文の制約
- 6.5.3 コンポーネント要素の操作 — host パラメーター
- 第7章 サービス開発
- 7.1 サービスの基本
- 7.1.1 コンポーネント/サービスの連携
- 7.1.2 依存性注入
- 7.1.3 依存性注入の基本
- 7.2 依存性注入のしくみ
- 7.2.1 providers パラメーターの記法
- 7.2.2 サービス生成のアプローチ — useXxxxx プロパティ
- 7.2.3 依存性注入のためのトークンを宣言する — provide プロパティ
- 7.2.4 単一のトークンに複数のサービスを紐付ける — multi プロパティ
- 7.3 依存性注入の高度な話題
- 7.3.1 インジェクターの階層構造
- 7.3.2 任意のサービスを宣言する — @Optional デコレーター
- 7.3.3 外部コンテンツからアクセスできないサービスを登録する
- — viewProviders パラメーター
- 7.3.4 インジェクターを手動で呼び出す — inject メソッド
- 7.4 非同期通信の実行 — Http/Jsonpサービス
- 7.4.1 SPA とXMLHttpRequest オブジェクト
- 7.4.2 Http サービスの基本
- 7.4.3 HTTP POST による非同期通信
- 7.4.4 JSON 形式の Web API にアクセスする
- 7.4.5 例:非同期通信処理をサービスに分離する
- 7.4.6 ローカル環境で Web API をエミュレートする
- — angular-in-memory-web-api
- 7.4.7 Observable/Promise 経由で渡された値を取得する — async パイプ
- 7.4.8 標準のリクエストオプションを上書きする
- 7.4.9 Http サービスでのセキュリティ対策
- 第8章 ルーティング
- 8.1 ルーティングとは?
- 8.2 ルーティングの基本
- 8.2.1 基底パスの設定 — メインページ
- 8.2.2 ルートの定義
- 8.2.3 ルート対応のリンク/表示領域の準備 — ルートコンポーネント
- 8.2.4 ルーター対応コンポーネントの作成
- 8.2.5 別のルートにリダイレクトする
- 8.3 ルーター経由で情報を渡す手法
- 8.3.1 パスの一部としてパラメーターを引き渡す — ルートパラメーター
- 8.3.2 ハイパーリンクにクエリ情報/フラグメントを引き渡す
- — queryParams/fragment 属性
- 8.4 マルチビュー/入れ子のビュー/ガード
- 8.4.1 テンプレートに複数のビュー領域を設置する
- 8.4.2 入れ子のビューを設置する
- 8.4.3 補足:ルーターのマッチング戦略(prefix とfull)
- 8.4.4 ルート遷移の可否を判定する — ガード
- 第9章 パイプ/ディレクティブの自作
- 9.1 パイプの自作
- 9.1.1 パイプの基本
- 9.1.2 例:改行文字を <br> 要素に変換する nl2br パイプ
- 9.1.3 パラメーター付きのパイプを定義する
- 9.1.4 例:配列の内容を任意の条件でフィルターする
- 9.1.5 pure なパイプとimpure なパイプ
- 9.2 属性ディレクティブの自作
- 9.2.1 属性ディレクティブの基本
- 9.2.2 パラメーター付きのディレクティブを定義する
- 9.2.3 イベント処理を伴うディレクティブ
- 9.2.4 例:検証ディレクティブを準備する
- 9.3 構造ディレクティブの自作
- 9.3.1 構造ディレクティブとは?
- 9.3.2 構造ディレクティブの実装
- 第10章 テスト
- 10.1 テストの基本
- 10.2 ユニットテスト(基本)
- 10.2.1 ユニットテストのためのツール
- 10.2.2 ユニットテストの準備
- 10.2.3 テストの基本
- 10.3 ユニットテスト(Angularアプリ)
- 10.3.1 パイプのテスト
- 10.3.2 サービスのテスト
- 10.3.3 コンポーネントのテスト(基本)
- 10.3.4 外部テンプレート付きコンポーネントのテスト
- 10.3.5 入出力を伴うコンポーネントのテスト
- 10.3.6 サービスに依存したコンポーネントのテスト
- 10.3.7 サービスに依存したコンポーネントのテスト(スパイ)
- 10.3.8 サービスに依存したコンポーネントのテスト(非同期版)
- 10.3.9 「浅い」コンポーネントのテスト — NO_ERRORS_SCHEMA
- 10.3.10 ディレクティブのテスト — ホストコンポーネント
- 10.3.11 Http/Jsonp を利用したサービスのテスト
- 10.4 E2E(End to End)テスト
- 10.4.1 E2E テストの準備
- 10.4.2 E2E テストの基本
- 第11章 関連ライブラリ/ツール
- 11.1 Angularで利用できる関連ライブラリ
- 11.1.1 Bootstrap を Angular アプリで活用する — ngx-bootstrap
- 11.1.2 標準の検証ルールを拡張する — ng2-validation
- 11.1.3 国際化対応ページを実装する — ng-xi18n
- 11.2 開発に役立つソフトウェア/ツール
- 11.2.1 アプリの雛形を自動生成する — Angular CLI
- 11.2.2 Angular アプリの構造を視覚化する — Augury
- 11.2.3 アプリを事前コンパイルする — AoT コンパイル
- Appendix TypeScript簡易リファレンス
- A.1 TypeScript Playground
- A.2 変数
- A.3 定数
- A.4 型アサーション
- A.5 関数
- A.6 アロー関数
- A.7 関数のオーバーロード
- A.8 共用型
- A.9 クラス
- A.10 get/set アクセサー
- A.11 継承
- A.12 インターフェイス
- A.13 ジェネリック
正誤表
| 該当頁 | 該当箇所 | 修正刷 |
|---|---|---|
| 訂正箇所 | 訂正事項 | 更新日 |
| p.123 | リスト4-23 | 3刷 |
| this.start = this.len * page; | 該当の行に引き出し線(3)を追加 | 2018/01/26 |
| p.287 | リスト 7-45 http/src/app/app.component.ts | 3刷 |
| this.http.post('app/http.php', params, { | this.http.post('app/http.php', ps, { | 2018/10/02 |
| p.355 | リスト9-4 pipe-html/src/app/nl2br.pipe.ts 下から3行目 | 3刷 |
| return value.replace(/\t?\n/g, '<br />'); | return value.replace(/\r?\n/g, '<br />'); | 2018/11/27 |
FAQ
発刊から年数が経過しており、TypeScriptなどのバージョンが古くなっているのが原因のようです。
エラーが出るものについて、package.jsonに記載のバージョン番号を以下のように新しいバージョンに変更してお試しください。
<修正例>
"typescript": "~2.1.0", → "typescript": "~4.0.0",
"rxjs": "5.0.1", → "rxjs": "5.5.12",
エラーが出るものについて、package.jsonに記載のバージョン番号を以下のように新しいバージョンに変更してお試しください。
<修正例>
"typescript": "~2.1.0", → "typescript": "~4.0.0",
"rxjs": "5.0.1", → "rxjs": "5.5.12",
更新日: 2022.06.13
ダウンロード
お問い合わせ
書籍に関するご質問や誤りのご報告、ご意見・ご感想などをお寄せください。
お問い合わせの前にFAQ・正誤表をご確認ください。すでに掲載済みの内容については個別回答が難しい場合があります。