blog

ウェブデザイナーがはじめる AngularJS シリーズウェブデザイナーがはじめるAngularJS:コントローラ間の連携

    • Ryuichi Nonaka
    この記事は書かれてから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が使えない場合があるを意識しないと上手く動作しないようです。

    参考サイト

    シリーズ

    1. AngularJSをはじめる前に - AngularJSに関するサイトやスライドまとめ
    2. ウェブデザイナーがはじめるAngularJS:AngularJSをはじめる
    3. ウェブデザイナーがはじめるAngularJS:SPA(Single Page Application)をはじめる前に
    4. ウェブデザイナーがはじめるAngularJS:MiddlemanとBowerで作るAngularJSアプリ開発環境
    5. ウェブデザイナーがはじめるAngularJS:ngRouteを使ったシンプルなViewの切り替え
    6. ウェブデザイナーがはじめるAngularJS:AngularUI Routerの基礎知識
    7. ウェブデザイナーがはじめるAngularJS:ngCookiesやngStorageを使ったCookieやlocalStorageへのアクセス
    8. ウェブデザイナーがはじめるAngularJS:DOM操作系ディレクティブを試す
    9. ウェブデザイナーがはじめるAngularJS:イベント系ディレクティブを試す
    10. ウェブデザイナーがはじめるAngularJS:Promise(Deferred)をつかった非同期処理
    11. ウェブデザイナーがはじめるAngularJS:$httpProviderのInterceptorsを使ってリクエスト・レスポンスを操作する
    12. ウェブデザイナーがはじめるAngularJS:Middlemanでng-annotateを使ったMinify対策
    13. ウェブデザイナーがはじめるAngularJS:コントローラ間の連携
    14. ウェブデザイナーがはじめるAngularJS:AngularJS向けのディレクティブが用意されたUI Bootstrap

    コメント・フィードバック