Angular with Rails 101

第 1 步:创建一个新的 Rails 应用程序

gem install rails -v 4.1
rails new angular_example

删除 turbolinks 需要将其从 Gemfile 中删除。

gem 'turbolinks'

app/assets/javascripts/application.js 中删除 require

//= require turbolinks

第 3 步:将 AngularJS 添加到资产管道

为了让 Angular 能够使用 Rails 资产管道,我们需要添加到 Gemfile:

gem 'angular-rails-templates'
gem 'bower-rails'

现在运行命令

bundle install

添加 bower 以便我们可以安装 AngularJS 依赖项:

rails g bower_rails:initialize json

将 Angular 添加到 bower.json

{
  "name": "bower-rails generated dependencies",
  
  "dependencies": {

    "angular": "latest",
    "angular-resource": "latest",
    "bourbon": "latest",
    "angular-bootstrap": "latest",
    "angular-ui-router": "latest"
  }
}

现在 bower.json 设置了正确的依赖项,让我们安装它们:

bundle exec rake bower:install

第 4 步:组织 Angular 应用程序

app/assets/javascript/angular-app/中创建以下文件夹结构:

templates/
modules/
filters/
directives/
models/
services/
controllers/

app/assets/javascripts/application.js 中,为 Angular 添加 require,模板助手和 Angular 应用程序文件结构。像这样:

//= require jquery
//= require jquery_ujs

//= require angular
//= require angular-rails-templates
//= require angular-app/app

//= require_tree ./angular-app/templates
//= require_tree ./angular-app/modules
//= require_tree ./angular-app/filters
//= require_tree ./angular-app/directives
//= require_tree ./angular-app/models
//= require_tree ./angular-app/services
//= require_tree ./angular-app/controllers

第 5 步:引导 Angular 应用程序

创建 app/assets/javascripts/angular-app/app.js.coffee

@app = angular.module('app', [ 'templates' ])

@app.config([ '$httpProvider', ($httpProvider)->
$httpProvider.defaults.headers.common['X-CSRF-Token'] = $('meta[name=csrftoken]').attr('content') ])  @app.run(->   console.log 'angular app running' )

app/assets/javascripts/angular-app/modules/example.js.coffee.erb 创建一个 Angular 模块:

@exampleApp = angular.module('app.exampleApp', [     # additional dependencies here   ])   .run(->     console.log 'exampleApp running'   )

app/assets/javascripts/angular-app/controllers/exampleCtrl.js.coffee 为这个应用程序创建一个 Angular 控制器:

angular.module('app.exampleApp').controller("ExampleCtrl", [   '$scope',   ($scope)->     console.log 'ExampleCtrl running'      $scope.exampleValue = "Hello angular and rails"  ])

现在添加一个到 Rails 的路由,将控制权传递给 Angular。Inconfig/routes.rb

Rails.application.routes.draw do   get 'example' => 'example#index' end

生成 Rails 控制器以响应该路由:

rails g controller Example

app/controllers/example_controller.rb

class ExampleController < ApplicationController
    def index
    end
end

在视图中,我们需要指定哪个 Angular 应用程序和哪个 Angular 控制器将驱动此页面。所以在 app/views/example/index.html.erb

<div ng-app='app.exampleApp' ng-controller='ExampleCtrl'>
  
  <p>Value from ExampleCtrl:</p>
  <p>{{ exampleValue }}</p>
  
</div>

要查看应用程序,请启动 Rails 服务器并访问 http:// localhost:3000 / example