Ho letto attraverso la seguente ricetta, che mostra un modo per alimentare un frontend AngularJS con un back-end endpoint Google Cloud:Qual è la differenza tra init() e window.init()?
Quello che non capisco è l'appendice sulle AngularJS e Cloud endpoint inizializzazione. La sezione rilevante è il seguente:
Appendice: Suggerimenti per AngularJS + cloud Endpoints inizializzazione Tip # 1: Fare attenzione alla sequenza di inizializzazione
il guestbook app carichi tre diverse librerie JS nel seguente sequenza di :
- AngularJS
- L'applicazione sul guestbook
- Google API client, WHI ch contiene gli endpoint funzionalità
Per seguire questa sequenza, l'index.html contiene i seguenti
<script>
tag nel tag<head>
per il caricamento di ciascuna delle librerie JS:<script src="js/angular.min.js"></script> <script src="js/guestbook.js"></script> <script src="https://apis.google.com/js/client.js?onload=init"></script>
Una volta caricato, il terzo libreria (Google API Client) chiama la funzione di inizializzazione specificata dal parametro "onload". In questo caso , la funzione init() è prevista e invocata. Suggerimento # 2: Entra nella mondo AngularJS il più rapidamente possibile
Nella sequenza di inizializzazione, usiamo le due funzioni:
init() function window.init() function
Questo init() funzione è definita in guestbook.js nel seguente modo:
function init() { window.init(); }
Come si può vedere il codice sopra, la funzione appena chiamate window.init (funzione cioè init() definito nell'oggetto globale window)() funzione e non fa altro. Il window.init() è definito nel controllore AngularJS come segue:
$window.init= function() { $scope.$apply($scope.load_guestbook_lib); };
In AngularJS, l'oggetto finestra globale si accede da “$ finestra” notazione che è un involucro per esso. È buona pratica in AngularJS non accedere direttamente all'oggetto finestra per migliorare la testabilità.
Il motivo per cui non si vuole eseguire l'inizializzazione nel metodo prima init() è così si può mettere il maggior numero di codice come possibile nel mondo AngularJS, come i controllori, i servizi e le direttive. Come risultato, è possibile sfruttare tutta la potenza di AngularJS e disporre di tutti gli test dell'unità, test di integrazione e così via.
Sembra che una funzione globale init()
sia definita in un file javascript esterno.Questa funzione init()
chiama solo window.init()
(e dovrebbe essere chiamata dalla libreria client di Google dopo che è stata caricata). Ma non è window.init() nient'altro che la funzione init()
definita a livello globale? Quindi non avremmo un loop qui fino a quando lo window.init()
(e quindi init()
) verrà ridefinito?
Indossi prego contare su risorse esterne al sito Mostra il codice di cui stai parlando. Le risorse fuori sede marciscono e le persone non dovrebbero doverle visitare per aiutarti. –