2013-02-26 15 views
11

ho capito come condividere i dati tra due controllori AngularJS utilizzando un servizio condiviso nel esempio inventato qui sotto:condivisione dei dati tra i controllori AngularJS ma avendo i dati condivisi provengono da una chiamata AJAX

(Funzionamento fiddle)

var app = angular.module('myApp', []); 

app.factory('UserData', function() { 
    var data = {foo: 'bar'}; 

    return { 
     getData: function() { 
      console.log('getData'); 
      return data; 
     }, 
     setData: function(newData) { 
      data = newData; 
     } 
    }; 
}); 

function MainCtrl($scope, UserData) { 
    console.log('MainCtrl'); 
    console.log(UserData.getData()); 
} 
MainCtrl.$inject = ['$scope', 'UserData']; 

function JobListCtrl($scope, UserData) { 
    console.log('JobListCtrl'); 
    console.log(UserData.getData()); 
} 
JobListCtrl.$inject = ['$scope', 'UserData']; 

il mio problema è che mi piacerebbe che i dati contenuti nel UserData provenire da una chiamata AJAX (presumibilmente usando $http).

ho provato a fare la chiamata Ajax nella funzione fabbrica UserData ma, dal momento che è in esecuzione in modo asincrono, MainCtrl e JobListCtrl vengono eseguiti prima che il servizio UserData ha effettivamente tutti i dati in esso.

Qualcuno può darmi qualche direzione su come configurare il monitoraggio?

+1

Vedere http://stackoverflow.com/questions/12505760/angularjs-processing-http-response-in-service/12513509#12513509 su come utilizzare una promessa e quindi attendere che il controller venga risolto. –

+0

@MarkRajcok, questo ha fatto il trucco. Grazie! –

risposta

10

ho creato questo esempio che mostra come preleva, memorizza e condividi i dati (modelli) tra diversi controller senza perdere la funzionalità di bindable.

diretta Esempio:http://pablodenadai.github.io/SharingModelsAngularJS/

Codice sorgente 1: (Risorse e modello di astrazione) https://github.com/pablodenadai/SharingModelsAngularJS/blob/master/app/scripts/controllers/main.js

Repo:https://github.com/pablodenadai/SharingModelsAngularJS

Speranza che aiuta.

+1

Potrebbe essere utile per fornire una visione poco qui o in Git, per alcune persone che non sono troppo appassionato di dipendenze angolari, ecc. –

+0

Come potrebbe funzionare per una raccolta, dove dire, vorrei aggiungere un modello da un controller "modale" e avere l'aggiornamento dell'elenco principale quando i dati vengono salvati? Supponiamo che il controller modale sia astratto (potrebbe essere qualsiasi modale "mobile" sull'ambito del controller principale). – FlavorScape

+4

L'esempio dal vivo non funziona al momento. Non c'è una pagina GitHub qui. –

3

Ecco alcuni punti di partenza per aiutarvi:

  1. Come ottenere i dati dal server (e come costruire un servizio di base 'modello'): SO post

  2. Come tenere l'esecuzione di controllo fino a quando i dati vengono recuperati dal server: screencast from egghead.io

+0

Se i servizi sono singleton (stessi dati ovunque), come posso definire un ModelType e creare istanze di quel tipo a cui è possibile accedere da più controller? http://stackoverflow.com/questions/24291136/best-practice-to-update-parent-or-other-simultaneous-angular-controllers – FlavorScape

Problemi correlati