2012-09-17 3 views
10

Ho questa app Rails che serve un index.html.erb da un UsersController. Nel regolatore angolare che gestisce la pagina, ho un servizio di $ risorsa per l'utente

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' 
]) 

E il controller recupera

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.. 

Penso che questo sia uno scenario piuttosto comune, ma chiaramente richiede più di un viaggio al server solo per questa pagina. Mi stavo chiedendo se c'è un modo per Angular di usare alcuni dati di bootstrap dato che sono stati restituiti i dati da un'azione chiamata in un servizio risorse $.

Mi sono già occupato della parte dati di bootstrap assegnandola a una variabile globale chiamata Gon con la gemma Gon ruby. So che potrei semplicemente fare $ scope.users = gon.users. Ma poi questi modelli di utenti non avranno le sottigliezze come $ scope.users [0]. $ Save()

Grazie!

+0

vorrei consigliare scavare nella fonte per il modulo di risorse e/o raccolta a parte un oggetto recuperato dal servizio $ risorse. Al di fuori di questo, è sempre possibile aggiungere il proprio metodo $ save che consuma il servizio $ http e si sottomette a qualsiasi cosa abbia bisogno nel tuo caso. –

risposta

11

Come si è visto, è davvero semplice!

Per le istanze, supponiamo di avere tutti i modelli non angolari in una variabile _tasks e l'angolare $ modello risorsa Attività, tutto ciò che devi fare è passare i _task uno per uno nella funzione di costruzione Attività come questa:

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

poi ciascuno dei $ scope.tasks avranno tutti coloro $ update(), $ delete() metodi

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

Si desidera evitare il viaggio di andata da User.query, giusto? Se è così, come su qualcosa di simile

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

Poi all'interno del controller

$scope.users = intitialUsers; 
+0

Grazie Will. Sì, questo è quello che sto facendo in questo momento e questo è anche il problema: ora che uno usa il modello degli utenti in ambito, ma ogni modello utente non avrà l'aggiornamento $, $ save, $ delete che viene fornito con $ resource. Ma sto cercando un modo, lo posterò presto come risposta –

+0

Hai mai trovato un modo per farlo? – schultzter