1)AngularJSのrouteサービスを導入
①angular-routeをインクルード
$ vi app/assets/javascripts/application.js
//= require angular-route
②ngRouteを依存性の設定に追加
$ vi app/assets/javascripts/mymodule.js
var mymodule = angular.module(“myModule”, [‘ngRoute’]);
2)ルートプロバイダ、パーシャルテンプレートの設定
ファイル内でRailsのヘルパーを使用するため、ファイルの拡張子に.erbを追加しています。
$ vi app/assets/javascripts/mymodule.js.erb
var mymodule = angular.module("myModule", ['ngRoute']); mymodule.config(function($routeProvider) { $routeProvider .when("/users/dummy", { templateUrl: "<%= asset_path('users/dummy.html') %>", controller: "UsersDummyCtrl" }) .otherwise({ templateUrl: "<%= asset_path('users/index.html') %>", controller: "UsersIndexCtrl" }); });
3)インデックスのコントローラファイル作成
上記でAngularJSのルート設定を行い、各ルート毎にパーシャルテンプレートとコントローラを定義する形に変更したので、インデックス用のコントローラを定義します。
$ vi app/assets/javascripts/mymodule.js.erb
mymodule.controller("UsersIndexCtrl", function($scope) { $scope.users = [ { name: "相川 一郎", email: "aikawa@example.com" }, { name: "石井 二郎", email: "ishii@example.com" }, ] });
4)パーシャルテンプレートファイルを作成
①indexのパーシャルテンプレートを作成
今までapp/views/users/index.html.erbに記述していた内容をパーシャルテンプレートファイルに記述します。
動作確認のためダミーページへのリンクを追加しています。
$ vi app/assets/templates/users/index.html
<div ng-controller="UsersIndexCtrl"> <h3>ユーザー一覧</h3> <table class="table table-bordered"> <thead> <td>名前</td> <td>メールアドレス</td> </thead> <tbody> <tr ng-repeat="user in users"> <td> {_{user.name}} </td> <td> {_{user.email}} </td> </tr> </tbody> </table> <a href="#/users/dummy">ダミー</a> </div>
②ダミーページのパーシャルビューを仮作成
$ vi app/assets/templates/users/dummy.html
<h3>ダミー</h3>
5)AngularJSのレイアウトテンプレートファイルを作成
Railsのconfig/route.rbでUsersコントローラのindexアクションをrootにしているので、とりあえずこのビューをレイアウトテンプレートファイルとします。
$ vi app/views/users/index.html.erb
<div ng-view></div>
6)動作確認
http://localhost:3000/
上記URLでインデックスページが表示され、ダミーのリンク押下でダミーページが表示される事を確認します。