10

我有这个由 UsersController 提供 index.html.erb 的 Rails 应用程序。在处理该页面的角度控制器中,我为用户提供了 $resource 服务

咖啡脚本

.factory('User', ['$resource', ($resource) ->
  $resource 'api/users/:user_id/:action', {authenticity_token:app.csrf},
    query:
      method: 'GET'
      isArray: yes
    new:
      method: 'GET'
      params:
        user_id: 'new'
    update:
      method: 'PUT'
])

控制器获取

window.app = angular.module("app", ['userServices'])
.config(["$routeProvider", ($routeProvider) ->
  $routeProvider
  .when "/users",
    templateUrl: "assets/templates/users/index.html"
    controller: UserCtrl
    
  .otherwise redirectTo: "/users"
])

# users Controllers
UserCtrl = ($scope, User) ->
  User.query (r) ->
    $scope.users = r
    # code..

我认为这是一个很常见的场景,但很明显,仅此页面就需要不止一次访问服务器。我想知道 Angular 是否有办法使用一些引导数据,因为它们是从 $resource 服务中调用的操作返回的数据。

我已经通过使用 Gon ruby​​ gem 将引导数据部分分配给名为 Gon 的全局变量来处理引导数据部分。我知道我可以简单地做 $scope.users = gon.users。但是这些用户模型不会得到像 $scope.users[0].$save() 这样的细节

谢谢!

4

2 回答 2

11

事实证明,这真的很简单!

例如,假设您将所有非角度模型都放在变量 _tasks 和角度 $resource 模型任务中,您需要做的就是将 _tasks 一个一个地传递给构造函数 Task ,如下所示:

$scope.tasks = (new Task(task) for task in _tasks)

然后每个 $scope.tasks 将具有所有这些 $update()、$delete() 方法

$scope.tasks[0].$update({due_at: new Date})
于 2012-11-20T21:25:26.180 回答
1

您想避免来自 User.query 的往返,对吗?如果是这样,这样的事情怎么样

<html>
<script type='text/javascript>
  initialUsers = <%= User.someRubyMethod.to_json %>
<script>

然后在你的控制器里面

 $scope.users = intitialUsers;
于 2012-11-20T02:34:05.860 回答