SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

AngularJSではじめるJavaScriptフレームワーク開発スタイル

AngularJSでMVCプログラミングをはじめよう

AngularJSではじめるJavaScriptフレームワーク開発スタイル 第2回

繰り返しのデータを表示する

 続いて、一覧ページを作成していきます。一覧は、配列に保存したデータを繰り返し表示していきます。そのためにリスト5のように新たに作成するコントローラ(listController)内で、データの配列を作成します。

リスト5 controllers.jsの抜粋
(function(module){
    // : (省略)

    // 一覧を表示する為のコントローラの作成
    module.controller('listController',function($scope){
        $scope.items = [
            {
                title: 'お買い物リスト',
                memo : '大根と豆腐を買ってくる'
            },
            {
                title: '通帳記入をする',
                memo : 'XX銀行の貯金通帳に記入する'
            }
        ];
    });
}(TodoModule));

 "$scope.items"という配列に表示するデータ一覧がありますので、そのデータを繰り返し表示する為のHTMLをリスト6のように編集します。

リスト6 index.html(一覧の表示)
<div class="container" ng-show="show.list">
    <div ng-controller="listController">
        <div class="list-group">
            <a class="list-group-item" ng-repeat="item in items"> <!-- (1) 繰り返しを指定する -->
                <div>
                    <h4 class="list-group-item-heading">{{item.title}}</h4>   <!-- (2) 各データの内容を表示する -->
                    <p class="list-group-item-text" >{{item.memo}}</p>
                </div>
            </a>
        </div>
    </div>
</div>

 また、ここで使用するディレクティブは表3となります。

表3 利用するディレクティブ一覧
ディレクティブ名 指定する属性 説明
ngRepeat ng-repeat 配列形式のデータを1つづつ繰り返し表示をする為のディレクティブ。HTMLはデータとして繰り返す分だけ、その要素が作成される。

 "ngRepeat"を利用する際には、(1)のように指定します。ここでitemsは配列のデータを示し、itemは繰り返される時の各データの変数になります。これをJavaScriptのコードで記述するとリスト7のようになります。

リスト7 ngRepeatの値の意味と同様のJavaScriptコード
items.forEach(function(item){
});

 また、各変数のデータを表示する際には、{{変数名}}とHTML内に記述するとその変数の値を設定することができます。従って、{{item.title}}という指定で各配列内オブジェクトのtitleプロパティを設定されます。

ページ内のクリックに対応する

 続いて、ページの切り替えをする処理をリスト8のようにpageControllerコントローラにchangePage()関数を定義します。定義する場所は、(1)のように"$scope"変数に指定します。これで、HTMLページでこの関数を実行できるように指定が可能です。これは先ほど、"$scope"内に作成した変数にアクセスできたように、関数にも同様にアクセスできます。

リスト8 controllers.jsの抜粋(クリックイベントの処理)
module.controller('pageController',function($scope){
   // : (省略)
   $scope.changePage = function(type){
        for(var name in $scope.show){
            if(name == type){
                 $scope.show[name] = true;
            }
            else{
               $scope.show[name] = false;
            }
        }
    };
}

 ページの切り替えは、サンプルアプリケーションの概要で示したようにページフッタで行えます。その部分のHTMLをリスト9に示します。

リスト9 index.html(フッタ部分の抜粋)
<!-- フッタ部分  -->
<nav>
    <div>
        <a class="btn btn-default" ng-click="changePage('add')">新規</a> <!-- (1) 新規ページの表示 -->
        <a class="btn btn-default" ng-click="changePage('list')">一覧</a>   <!-- (2) 一覧ページの表示 -->
    </div>
</nav>

 ngClickディレクティブ(ng-click属性)は、aタグやbuttonタグなどクリックイベントが発生した際に、実行すべき処理を値に設定します。

 (1)(2)の双方で、クリックした際には先ほど作成した関数の"changePage"関数を実行するように指定します。

 changePage関数は、引数にページタイプを指定するように先ほどしたので、ここでは引数にそれぞれのページタイプを指定しています。記述する方法として、今までのonClick属性と同様に記述できるので親しみやすいと思います。

 しかしながら、AngularJSではスコープを用いることで、JavaScriptでのグローバル汚染などの問題を回避しつつ、より直感的にHTMLが記述できるようになっています。

次回に向けて

 ここまでで、AngularJSを使ったアプリケーションの大まかな構造と、ページ表示を制御する為の方法、クリックなどのイベント処理を行う方法を紹介しました。これだけの機能を使っても、HTMLの制御と処理の分離が十分できます。

 また、今回のようなサンプルアプリケーション程度の規模であれば、この構造のまま機能を追加していっても問題はありませんが、規模が大きくなっていくと各コントローラ同士でのデータ連係やイベント連携などの必要が生じてきます。

 次回以降では、そのような連携部分を説明しつつサンプルアプリケーションを完成させていきます。

参考資料

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
AngularJSではじめるJavaScriptフレームワーク開発スタイル連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 小林 昌弘(コバヤシ マサヒロ)

WINGSプロジェクト について> 有限会社 WINGSプロジェクト が運営する、テクニカル執筆コミュニティ(代表 ...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/8207 2014/10/27 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー