2015-02-19 15 views
6

Sto lavorando su angularJs e sul progetto dattiloscritto. Devo effettuare una chiamata http sincrona e ottenere alcuni dati dal server prima di avviare la mia app client e caricare l'interfaccia utente. Cerco su internet e vedo tutti parlare di promessa, huumm okay perché no. Quindi uso la promessa (chiama $ http call e usa $ q per restituire la promessa) nella mia app.run(). Forse mi manca niente perché questo non funziona affatto. Avvio angolare app.config(), quindi app.run(), ... Ma Angular non attende app.config() prima di avviare app.run(). Quindi la mia prima promessa è lanciare in app.run() e prima che risolva Angular provi ad istanziare il controller ... Non voglio creare una nuova chiamata di servizio httpSynchronous ma non ho altre idee.AngularJS promise in app.run()

+2

Aggiornamento con qualche codice per favore: D – Seth

+0

Puoi spostare la chiamata sincrona http alla tua app.run? Quindi puoi usare il tuo codice che dipende dal risultato nel blocco di successo. –

risposta

14

Angolare non supporta le azioni asincrone nelle funzioni .config e .run. Se si desidera ritardare l'applicazione, ci sono 2 modi:

  • Il primo è quello di ritardare la vostra intera applicazione utilizzando angular.bootstrap() per avviare manualmente. Ma qualsiasi cosa tu faccia è fuori dall'angolare, quindi non hai accesso ad altro che a JavaScript.
  • Il secondo è utilizzare la proprietà resolver delle rotte. Se si utilizza un router come angular route segment o ui router, è possibile definire una rotta/stato superiore con una risoluzione che verrà risolta quando l'applicazione viene caricata (e se si forza un ricaricamento completo del percorso).
+0

Grazie per la risposta, ma non posso usare la prima soluzione, perché devo fare una chiamata http mutiple e inizializzare il componente angularJs (service, direttiva, ...) quindi questa soluzione sarà molto brutta. E vedo già questa soluzione su Internet, ma mettere tutta questa logica nella definizione del mio percorso non è la strada giusta. Risolvi è utilizzato per risolvere i servizi per controller e questo non è il mio obiettivo. –

+0

Sì, non lo farei neanche io. Ma è ancora una possibilità;) –

+2

@Tarak risoluzione può essere utilizzata per molte cose –