我创建了rails视图(ERB)。但是,我想将它集成到angularjs $routeProvider
中,但我不知道应该在templateUrl
中填入哪个url来为我提供相应的rails视图。例如,我试过:
$routeProvider.when('/pages/foo', {
templateUrl: "/pages/foo",
controller: "PageFoo"
})
但结果显示为空白页面。
这两个功能是否可以集成?或者我是否必须创建新的.html
文件,而不是使用预先存在的.html.erb
答案 0 :(得分:16)
Angular js提供自己的路线。当您想要将视图与数据库(CRUD)连接时,将始终使用rails路由。这是与angular.js的数据绑定现在我将向您展示如何使用rails ...
我想使用angular js视图添加新用户并列出所有用户。我将使用rails作为后端来将用户存储在数据库中,因此我将创建user_controller
首先创建用户资源。我们不会创建任何视图,所以要小心
rails g resource user name:string
然后转到route.rb并检查是否创建了一个路由,并创建带有索引操作的Home控制器,我们将将其用作单页面应用程序,我们的输出将会产生。
rails g controller home index
root to: "home#index"
在终端上输入此命令,您将看到我们的7条路线。我们从不使用new和edit方法,因为new和edit不响应json。
rake routes
现在我们希望所有具有唯一名称的用户都转到create_user迁移并取消注释该行,然后我们将迁移数据库。
add_index :users, :name, unique: true
rake db:migrate
现在修改我们的控制器,以便所有数据获取和插入都将以json格式完成。所以把这个代码放在users_controller.rb中,如果你使用的是rails 4,那么请不要这样做。属性可以在模型中调整。
class UsersController < ApplicationController
respond_to :json
def index
respond_with User.all
end
def create
respond_with User.create(user_params)
end
private
def user_params
params.require(:user).permit(:name)
end
end
是时候在我们的铁轨应用中使用angulajs
使用此
转到application.html.erb替换标记行 <html ng-app="userApp">
现在在asses / javascripts中添加angular.js文件,从http://angularjs.org/下载
现在我们将创建一个控制器来处理我们的角度应用程序路由,然后知道这个控制器需要我的东西。所以在终端上输入
mkdir -p app/assets/javascripts/angular/controllers
现在让我们自己创建控制器文件。我正在调用这个控制器“userCtrl”,因此我们的文件名将是 应用程序/资产/ Javascript角/角度/控制器/ userCtrl.js.coffee
在控制器userCtrl
中app = angular.module("userApp", ["ngResource"])
@userCtrl = ($scope, $resource) ->
User = $resource("/users", {id: "@id"}, {update: {method: "PUT"}})
$scope.users = User.query()
$scope.createUser = ->
user = User.save($scope.newUser)
$scope.users.push(user)
(这将通过创建createUser方法将新用户记录插入数据库)
创建一个视图,用于从用户那里获取输入,在home / index.html.erb中编写此代码。
<div ng-controller="userCtrl">
<form ng-submit="createUser()">
<label>Enter Name</label>
<input type="text" placeholder="Enter user name" ng-model="newUser.name" />
<button ng-click="createUser()" class="button tiny">Submit</button>
</form>
<!-- List all usres -->
<h4 ng-show="users.$resolved && users.length > 1">All users</h4>
<span ng-repeat="c in users">
{{c.name}}<br>
</span>
</div>
运行应用程序并观察输出。
答案 1 :(得分:1)
在这个page中,它给出了一个支持Angularjs + Rails的'Hello World'示例。 (请忽略额外功能的额外部分。)当您键入任何名称,然后显示为他显示的Hello消息时,您有一个功能强大的Angularjs + rails应用程序。
分享几点:
包含angular.js文件的简单方法:
将gem 'angularjs-rails'
放入Gemfile中;
然后将//= require angular
放入app/assets/javascripts/application.js
文件中。
您很可能需要//= require angular-resource
,以便您可以使用ngResource服务从服务器端访问rails应用程序提供的RESTful API。 See this page例如。
以这种方式在布局中包含Rails控制器特定的javascript代码:
在app/views/layouts/applications.html.erb
行之后的<%= yield %>
文件中添加以下代码:
<%= page_specific_js = "#{params[:controller]}_#{params[:action]}" %>
<%= javascript_include_tag page_specific_js if Rails.application.assets.find_asset page_specific_js %>
<%= stylesheet_link_tag page_specific_js if Rails.application.assets.find_asset page_specific_js %>
从application.js中删除//= require_tree .
。
在config / initializers / assets.rb中包含以下代码,用于预编译js和css文件:
Rails.application.config.assets.precompile << Proc.new do |path|
if path =~ /\.(css|js)\z/
full_path = Rails.application.assets.resolve(path).to_path
app_assets_path = Rails.root.join('app', 'assets').to_path
if full_path.starts_with? app_assets_path
puts "including asset: " + full_path
true
else
puts "excluding asset: " + full_path
false
end
else
false
end
end