一尘不染

如何在Angular.js中的$ resource服务获取数据时对其进行引导

angularjs

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

CoffeeScript

.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红宝石gem的名为Gon的全局变量来解决这个问题。我知道我可以简单地执行$ scope.users =
gon.users。但是,这些用户模型将不会像$ scope.users [0]。$ save()这样的细节。

谢谢!


阅读 220

收藏
2020-07-04

共1个答案

一尘不染

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

例如,假设您将所有非角度模型都包含在变量_tasks和角度$
resource模型Task中,那么您要做的就是将_tasks逐个传递给构造函数Function Task,如下所示:

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

那么每个$ scope.tasks将具有所有这些$ update(),$ delete()方法

$scope.tasks[0].$update({due_at: new Date})
2020-07-04