blog
ウェブデザイナーがはじめる AngularJS シリーズウェブデザイナーがはじめるAngularJS:コントローラ間の連携
この記事は書かれてから1年以上経過しており、内容が古い場合があります。
コントローラやサービスを作るのに慣れてきたところでぶち当たるのがコントローラー間で値を受け渡したりイベントを通知することでした。少し調べていくつか方法があることとui-router等を使っていると注意しなければならないことがあったのでサンプルとリンクを張っておきます。
値を受け渡す方法
値を受け渡す方法は主に3つあるようです。こちらの記事Angular JS で複数のコントローラ間でモデル(状態や値)を共有する方法 3 種類を参考にしています。
- Shared Service:factoryを使った値の共有
- Parent Scope Sharing:親スコープを参照する
- Pub/Sub:$emit / $broadcastを使って$onで受け取る
実際にサンプルを作って試して見ました。
Shared Service
factoryでサービスを作り値を共有します。値の共有は可能ですが動的に変更したい場合、変更は通知されないため$watchを使ってそれぞれのコントローラから変更を監視する必要があります。
Parent Scope Sharing
Parent Scope Sharingは親のスコープにアクセスするだけなので一方通行です。こちらも$watchを使うことで変更の監視は可能です。
Pub/Sub
Pub/Subをはじめて知ったのですがPub/Subメッセージングモデルというものらしいです。$emit / $broadcastを使ってリスナーに通知します。$emitは自身のコントローラと親コントローラ、$broadcastは自身のコントローラとすべての子コントローラに通知します。
ui-router等を使っている場合、こちらコントローラ間のイベント通知では$broadcastが使えない場合があるを意識しないと上手く動作しないようです。
参考サイト
- 複数Contoller間で、Service,$rootScope,$emitを利用して変数を共有した時のメモ
- AngularJS のデータバインドを支える $watch
- Sharing Data, State and Models on AngularJS: Alternatives, comparison and my solution
シリーズ
- AngularJSをはじめる前に - AngularJSに関するサイトやスライドまとめ
- ウェブデザイナーがはじめるAngularJS:AngularJSをはじめる
- ウェブデザイナーがはじめるAngularJS:SPA(Single Page Application)をはじめる前に
- ウェブデザイナーがはじめるAngularJS:MiddlemanとBowerで作るAngularJSアプリ開発環境
- ウェブデザイナーがはじめるAngularJS:ngRouteを使ったシンプルなViewの切り替え
- ウェブデザイナーがはじめるAngularJS:AngularUI Routerの基礎知識
- ウェブデザイナーがはじめるAngularJS:ngCookiesやngStorageを使ったCookieやlocalStorageへのアクセス
- ウェブデザイナーがはじめるAngularJS:DOM操作系ディレクティブを試す
- ウェブデザイナーがはじめるAngularJS:イベント系ディレクティブを試す
- ウェブデザイナーがはじめるAngularJS:Promise(Deferred)をつかった非同期処理
- ウェブデザイナーがはじめるAngularJS:$httpProviderのInterceptorsを使ってリクエスト・レスポンスを操作する
- ウェブデザイナーがはじめるAngularJS:Middlemanでng-annotateを使ったMinify対策
- ウェブデザイナーがはじめるAngularJS:コントローラ間の連携
- ウェブデザイナーがはじめるAngularJS:AngularJS向けのディレクティブが用意されたUI Bootstrap