Ich habe durch das folgende Rezept lesen, die eine Art und Weise zeigt einen AngularJS Frontend mit einem Google Cloud Endpoints Backend an der Macht:Was ist der Unterschied zwischen init() und window.init()?
Was ich nicht verstehe, ist der Anhang auf dem AngularJS und Cloud Endpoints Initialisierung. Der entsprechende Abschnitt ist der folgende:
Anhang: Tipps AngularJS + Cloud Endpoints Initialisierung Tipp # 1: auf der Initialisierungssequenz Vorsicht
Das Gästebuch App lädt drei verschiedene JS Bibliotheken in der folgenden Sequenz :
- AngularJS
- Das Gästebuch App
- Google API-Client, whi ch enthält die Endpunkte Funktionalitäten
diese Sequenz zu folgen, die index.html enthält folgende
<script>
Tags im<head>
-Tag für jede der JS-Bibliotheken geladen:<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>
Einmal geladen, die dritte Bibliothek (Google API Client) ruft die Initialisierungsfunktion auf, die durch den Parameter 'onload' angegeben wird. In diesem Fall wird die Funktion init() erwartet und aufgerufen. Tipp # 2: Geben Sie in die AngularJS Welt so schnell wie möglich
In der Initialisierungssequenz, verwenden wir die zwei Funktionen:
init() function window.init() function
Diese Funktion init() in guestbook.js im folgenden definiert ist, übrigens:
function init() { window.init(); }
Wie Sie den Code oben sehen können, ist die Funktion window.init nur() aufruft Funktion (dh init() Funktion im globalen Fensterobjekt definiert) und tut nichts anderes. Die window.init() ist in den AngularJS Controller wie folgt definiert:
$window.init= function() { $scope.$apply($scope.load_guestbook_lib); };
In AngularJS, das globalen Fensterobjekt von „$ window“ notation zugegriffen wird, die ein Wrapper für sie ist. Es ist eine bewährte Methode in AngularJS , nicht direkt auf das Fensterobjekt zuzugreifen, um die Testbarkeit zu verbessern.
Der Grund, warum Sie nicht die Initialisierung im erste Methode init() ausführen wollen, ist so können Sie so viel Code wie möglich in der AngularJS Welt, wie Steuerungen, Dienstleistungen und Richtlinien setzen. Als Ergebnis können Sie die volle Leistung von AngularJS nutzen und haben alle Ihre Komponententests, Integrationstests und so weiter.
Es scheint, dass eine globale Funktion init()
in einer externen Javascript-Datei definiert wird.Diese init()
Funktion ruft nur window.init()
(und soll von der Google-Client-Bibliothek aufgerufen werden, nachdem es geladen wurde). Aber ist window.init() nichts als die global definierte init()
Funktion? Würden wir hier nicht eine Schleife bekommen, bis window.init()
(und damit init()
) neu definiert wird?
Bitte machen don Verlassen Sie sich nicht auf externe Ressourcen. Zeigen Sie den Code, von dem Sie sprechen. Off-Site-Ressourcen verrotten, und die Leute sollten sie nicht besuchen müssen, um Ihnen zu helfen. –