(1)インストール、初期設定
1)sample_ngという名前のアプリを作成
$ cd ~/rails_projects
$ rails new sample_ng
2)Gemfileを修正
・多くの機能がAngularJSと重複するようなので、ここではTurbolinksを無効にします。
・
$ cd sample_ng
$ vi Gemfile
ruby '2.0.0'
gem 'therubyracer', platforms: :ruby
#gem 'turbolinks', '1.1.1'
gem 'bootstrap-sass', '3.2.0.2'
gem 'autoprefixer-rails'
gem 'angularjs-rails'
gem 'angular-ui-bootstrap-rails'
※'bootstrap-sass'のバージョンが、3.1.1.1の場合に下記エラーが発生したため、上記のようにバージョンを指定しました。
Sass::SyntaxError: File to import not found or unreadable: bootstrap-sprockets.
3)バンドルインストール
$ bundle install
4)AngularJSをインクルード
$ vi app/assets/javascripts/application.js
//= require jquery
//= require jquery_ujs
//= require angular
//= require angular-ui-bootstrap-tpls
5)Bootstrap3をスタイルシートファイルでインポート
$ vi app/assets/stylesheets/custom.css.scss
@import "bootstrap-sprockets";
@import "bootstrap";
(2)AngularJSのモジュール、コントローラ作成
1)モジュール作成
①スクリプトのファイル作成
$ vi app/assets/javascripts/mymodule.js
ファイルの先頭に'myModule'という名前でモジュール作成するため下記記述追加
myModule = angular.module('myModule', ['ui.bootstrap'])
②ビューにモジュールの設定
application.html.erbのhtmlタグに①で記述したモジュール名を記載
$ vi app/views/layouts/application.html.erb
<html ng-app="myModule">
③AngularJSスクリプトのインクルードの設定
application.jsに①で作成したJavaScriptファイルをインクルードする設定追加
$ vi app/assets/javascripts/application.js
//= require mymodule
(3)ナビゲーションメニュー作成
1)Bootstrap3のFixed navbarを導入
Bootstrap3のサンプルで提供されているFixed navbarを流用してナビゲーションメニューを作成します。
①Bootstrap3.2のソースをダウンロード
②docs\examples\navbar-fixed-topフォルダ内のindex.htmlのヘッダーメニュー部をコピーし、ヘッダーパーシャルに貼り付け。
$ vi app/views/layouts/_header.html.erb
<!-- Fixed navbar -->
<div class="navbar navbar-default navbar-fixed-top" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">Project name</a>
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li class="active"><a href="#">Home</a></li>
<li><a href="#about">About</a></li>
<li><a href="#contact">Contact</a></li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <span class="caret"></span></a>
<ul class="dropdown-menu" role="menu">
<li><a href="#">Action</a></li>
<li><a href="#">Another action</a></li>
<li><a href="#">Something else here</a></li>
<li class="divider"></li>
<li class="dropdown-header">Nav header</li>
<li><a href="#">Separated link</a></li>
<li><a href="#">One more separated link</a></li>
</ul>
</li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li><a href="../navbar/">Default</a></li>
<li><a href="../navbar-static-top/">Static top</a></li>
<li class="active"><a href="./">Fixed top</a></li>
</ul>
</div><!--/.nav-collapse -->
</div>
</div>
③navbar-fixed-topのCSS設定
docs\examples\navbar-fixed-topフォルダ内のnavbar-fixed-top.css内の下記設定をコピー
$ vi app/assets/stylesheets/custom.css.scss
body {
min-height: 2000px;
padding-top: 70px;
}
2)ナビゲーションメニューを作成
①ヘッダーパーシャルを修整
Railsのヘルパーを使ってリンク部を書き換えます。
$ vi app/views/layouts/_header.html.erb
<ul class="nav navbar-nav">
<li><%= link_to "Home",'#', id: "logo", class: "active"%></li>
<li><%= link_to "Help", '#' %></li>
<li><%= link_to "Sign in", '#' %></li>
<li class="dropdown">
:
②レイアウトファイルを設定
app/views/layouts/application.html.erbにパーシャルを埋め込む
$ vi app/views/layouts/application.html.erb
<!DOCTYPE html>
<html ng-app="myModule">
<head>
<title>Ruby on Rails with AngularJS | <%= yield(:title) %></title>
<%= stylesheet_link_tag "application", media: "all" %>
<%= javascript_include_tag "application" %>
<%= csrf_meta_tags %>
</head>
<body>
<%= render 'layouts/header' %>
<%= yield %>
</body>
</html>
(4)静的ページ用のコントローラ、ビューを作成
1)"StaticPages"という名前のコントローラと"home"、"help"という名前のアクションを作成
$ rails generate controller StaticPages home help
2)ルート設定を追加、確認
$ vi config/routes.rb
SampleNg::Application.routes.draw do
root 'static_pages#home'
get "static_pages/help"
$ rake routes
Prefix Verb URI Pattern Controller#Action
root GET / static_pages#home
static_pages_help GET /static_pages/help(.:format) static_pages#help
3)ナビゲーションメニューのリンクを変更
$ vi app/views/layouts/_header.html.erb
<ul class="nav navbar-nav">
<li><%= link_to "Home", root_path, id: "logo", class: "active"%></li>
<li><%= link_to "Help", static_pages_help_path %></li>
(5)ブートストラップのナビゲーションメニューをAngularJSの機能を使って書換え
ブートストラップ3のFixed navbarでは、折り畳み(Collapse)とドロップダウンメニューでJavaScriptを使用しています。
ドロップダウンメニューは変更しなくても動作しましたが、、折り畳み(Collapse)は二つの方法で記述方法が異なっていて修整する必要がありました。
1)ヘッダーパーシャルを修整
$ vi app/views/layouts/_header.html.erb
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
↓
<button type="button" class="navbar-toggle" data-toggle="collapse" ng-click="isCollapsed = !isCollapsed">
<div class="navbar-collapse collapse">
↓
<div class="navbar-collapse" collapse="isCollapsed">
2)AngularJSスクリプトを修整
$ vi app/assets/javascripts/mymodule.js
myModule = angular.module('myModule', ['ui.bootstrap'])
function CollapseDemoCtrl($scope) {
$scope.isCollapsed = true;
}
CollapseDemoCtrl.$inject = ['$scope'];
myModule.controller('CollapseDemoCtrl', CollapseDemoCtrl);
(6)動作確認
http://localhost:3000/にアクセスし、ヘッダーメニューが表示され、リンク、ドロップダウンメニュー、ブラウザ画面縮小時の折り畳みが正常に動作することを確認