Подтвердить что ты не робот

Как загружать данные, поскольку они были выбраны службой $resource в Angular.js

У меня есть это приложение Rails, которое обслуживает index.html.erb с помощью UserController. В контроллере angular, который обрабатывает эту страницу, у меня есть служба ресурсов $для пользователя

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.

Я уже позаботился о части данных bootstrap, присвоив ее глобальной переменной Gon с Gon Ruby gem. Я знаю, что могу просто сделать $scope.users = gon.users. Но тогда эти модели пользователей не получат такие тонкости, как $scope.users [0]. $Save()

Спасибо!

4b9b3361

Ответ 1

Как оказалось, это очень просто!

Для экземпляров предположим, что у вас есть все ваши модели не angular в переменной _tasks и задаче $resource model angular $, все, что вам нужно сделать, это передать _tasks один за другим в функцию-конструктор Задача типа это:

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

то каждая из $scope.tasks будет иметь все эти методы $update(), $delete()

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

Ответ 2

Вы хотите избежать поездки в оба конца из User.query, верно? Если да, то как насчет этого типа

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

Затем внутри вашего контроллера

 $scope.users = intitialUsers;