Czytałem przez następującej receptury, która pokazuje drogę do napędzania frontend angularjs z backend Google Cloud Endpoints:Jaka jest różnica między init() i window.init()?
Co nie rozumiem jest dodatek na angularjs i chmura punktów końcowych inicjalizacja. Odpowiednia sekcja jest następujący:
Dodatek: Wskazówki dotyczące angularjs + Chmura Punkty końcowe Inicjowanie Tip # 1: Uważaj na sekwencji inicjalizacji
księgi aplikacja ładuje trzy różne biblioteki JS w następującym sekwencji :
- angularjs
- Aplikacja księgę gości
- Client API Google, whi ch zawiera punkty końcowe funkcjonalności
do tej sekwencji, index.html zawiera następujące
<script>
tagów w tagu<head>
ładowania każdej z bibliotek 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>
Po załadowaniu, trzeci biblioteka (Google API Client) wywołuje funkcję inicjującą określoną przez jej parametr "onload". W tej sprawie oczekiwana jest funkcja init() i wywoływana. Tip # 2: Wejdź do światowej angularjs jak najszybciej
W sekwencji inicjalizacji używamy dwie funkcje:
init() function window.init() function
ten init() funkcja jest zdefiniowana w guestbook.js w następujących sposób:
function init() { window.init(); }
Jak widać powyższy kod, funkcja po prostu wywołuje window.init) function (tj init() funkcja zdefiniowana w globalnym obiektu window) ( i nie robi nic innego. Window.init() jest zdefiniowana w angularjs kontroler następująco:
$window.init= function() { $scope.$apply($scope.load_guestbook_lib); };
W angularjs, globalny okno obiekt jest dostępny przez „okno” $ notacji która jest opakowaniem dla niego. Najlepszą praktyką w AngularJS jest nie uzyskiwanie bezpośredniego dostępu do obiektu okna w celu poprawy testowalności.
Powodem, dla którego nie chciał wykonać inicjalizację w metodzie pierwszy init() jest tak można umieścić jak najwięcej jak to możliwe kodu w świecie angularjs, takie jak kontrolery, usług i dyrektyw. Dzięki temu możesz wykorzystać pełną moc AngularJS i mieć wszystkie testy jednostkowe, testy integracji i tak dalej.
Wygląda na to, że globalna funkcja init()
jest zdefiniowana w zewnętrznym pliku javascript.Ta funkcja init()
po prostu wywołuje window.init()
(i powinna być wywoływana przez bibliotekę klienta Google po jej załadowaniu). Ale czy nie jest to funkcja window.init(), tylko globalnie zdefiniowana funkcja init()
? Czy nie otrzymamy tutaj pętli, dopóki nie zostanie ponownie zdefiniowana window.init()
(i tym samym init()
)?
proszę don polegać na zasobach poza siedzibą. Pokaż kod, o którym mówisz. Zasoby spoza serwisu gniją, a ludzie nie powinni odwiedzać ich, aby ci pomóc. –