我發現訣竅是實際創建一個帶有init函數的控制器,該函數採用所需的值。在我來說,我只是創建了一個app/assets/javascripts/angular_app.js
文件看起來像這樣:
//= require_self
AngularRails = angular.module('AngularRails', []);
AngularRails.controller('PostFormCtrl', function($scope) {
$scope.init = function(title) {
$scope.title = title;
}
});
你必須翻譯成視圖,但HAML它應該是這個樣子:
<div ng-app="AngularRails">
<div ng-controller="PostFormCtrl" ng-init="init('<%= @post.title %>')">
<%= form_for @post, html: {name: "postForm", "novalidate" => true} do |f| %>
<%= f.text_field :title, "ng-model" => "title", required: true %>
<%= f.submit "ng-disabled" => "postForm.$invalid" %>
<% end %>
</div>
</div>
請記住,包括angular_app文件導入到application.js中,它應該是世界的。顯然,這不是一個非常強大的解決方案,但是您可以使用活動模型序列化程序將rails對象轉換爲json對象。然後,將該json對象傳遞給init函數並在控制器中迭代該json對象的鍵/值對,並將它們設置爲$ scope。類似這樣的:
AngularRails.controller('PostFormCtrl', function($scope) {
$scope.init = function(input) {
Object.keys(input).forEach(function(key) {
$scope[key] = input[key];
});
};
});
希望有所幫助!