AngularJS on Rails

AngularJSとrailsの連携に関するメモです。

参考は以下のサイトを参考にしました

AngularJS on Rails 4 - Part 2

まずはRailsプロジェクトを作成しておく。
Gemfileには今回AngularJSと連携するためにangular-gemを追加しておく。


gem 'angular-gem'


ちょっと前にやったので忘れてしまったが、多分


rails g angular:install
を実行。

次にAngularJSの設定。
今回はeventsテーブルのデータの一覧表示なので、関連するcoffeescriptファイルたちは次のようになる(JSでなくcoffeescriptで書いてます)

app/assets/javascript/application.js に以下を追加


18 //= require app
19 //= require_tree ./angular

app/assets/javascript/app.js.coffee


window.App = angular.module('LifePhotos', ['ngResource'])

app/assets/javascripts/angular/controllers/events_ctrl.js.coffee


1 App.controller 'EventsCtrl', ['$scope', ($scope) ->
2 $scope.message = "Angular Rocks!"
3 ]
4 App.controller 'EventsCtrl', ['$scope', 'Events', ($scope, Events) ->
5 $scope.events = Events.query()
6 ]

app/assets/javascripts/angular/services/events.js.coffee


1 App.factory 'Events', ['$resource', ($resource) ->
2 $resource '/events/event_list'
3 ]

続いてRailsのコントローラは、
app/controller/events_controller.rb


10 def event_list
11 @events = Event.all
12 render json: @events, status: 201
13 end

そしてview側。
app/views/layouts/events.html.erb


1
2
3
4 LifePhotos
5
6
7
8 <%= stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true %>
9 <%= csrf_meta_tags %>
17 途中省略
28
29
30
31 <%= javascript_include_tag "application" %>

app/views/events/index.html.erb


<div class="content" ng-controller="EventsCtrl">
<div class="content_div">
<u;1 ng-show="events.length" style="list-style:none;padding:0">
件数:{{events.length}}
<li ng-repeat="event in events">
{{event.title}} {{event.start}} から {{event.end}} |  <a href='/events/{{event.id}}' >詳細</a>  
</li>
</u1>
</div>
<br>
</div>

以上です。
これでRails側がJSON形式で返したデータをAngularJSを使ったViewで表示します。