2012-10-24 12 views
14

Ten kod w prostym pliku HTML działa:window.onload nie działa w angularjs

<script> 
    function load() { 
    alert("load event detected!"); 
    } 
    window.onload = load; 
</script> 

Jednakże, jeśli mogę umieścić go w pliku index.html wystąpienia angularjs aplikacji internetowych, to nie. Czy ktoś wie, dlaczego nie?

+1

Nie mówiąc te dwie rzeczy są nie do pogodzenia, ale jeśli jesteś poświęcenie czasu, aby napisać aplikację wtedy angularjs powinien prawdopodobnie szukać lepszego domu dla funkcji obciążenia. Sterownik dołączony do elementu HTML najwyższego poziomu może to zrobić. –

+1

Potrzebujemy więcej informacji ... po pierwsze. Kod, który wykonałeś bezbłędnie dla mnie. Po drugie, co próbujesz zrobić? Roy Truelove ma absolutną rację, prawdopodobnie nie musisz używać window.onload w kanciastej aplikacji. –

+0

Dzięki @RoyTruelove i blesh. Po prostu próbowałem wykonać kod z index.html i tym razem to działa. Nie mam pojęcia, co się zmieniło.Prawdopodobnie masz rację, jeśli nie potrzebujesz window.onload. Spróbuję w inny sposób. – Curt

Odpowiedz

4

następujące powinny działać:

jQuery (function() {/ ** moje funkcje okna onload ** /})

od kątowej wykorzystuje podzbiór jQuery jakikolwiek również może zawierać prawdziwą rzecz.

jeszcze lepiej:
Zamiast tego, można rozważyć użycie kątowego sposób inicjujących rzeczy:

że byłoby: http://docs.angularjs.org/api/ng.directive:ngInit

< każdy ng-init = "functionInController (coś) "...

uczynić go niewidocznym do czasu init: http://docs.angularjs.org/api/ng.directive:ngCloak

< każdy ng-płaszcz .....

do zainicjowania/dostosować całych elementów: http://docs.angularjs.org/guide/directive

< dowolny dyrektywa nazwa ....

+0

Dzięki @Heinrich za Twoją sugestię. Jestem nowy w AngularJS, więc może mi to trochę potrwać, ale warto się na to zagłębić. – Curt

+0

możesz to sprawdzić: http://stackoverflow.com/questions/12922532/breaking-html-into-management-templates-for-angularjs/12923289#12923289 – Heinrich

+2

ng-init nie powinien być używany w ten sposób, zgodnie z odpowiednia dokumentacja [angularJS] (https://docs.angularjs.org/api/ng/directive/ngInit). – Pak

3

Wypróbuj

angular.element($window).bind('load', function() { 
}); 
+2

Może to być również angular.element ($ window). – iamdash

+0

@ iamdash: Naprawiono to, thx –

+0

$ okno nie jest zdefiniowane – ryaz

10

Zadzwoń swoją funkcję z ng-init

var app = angular.module('app',[]); 
 
app.controller('myController', function($scope){ 
 
    $scope.load = function() { 
 
     alert("load event detected!"); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app='app'> 
 
    <div ng-controller='myController' ng-init='load()'></div> 
 
</div>

+0

Mam również ten sam problem, używam $ window.load, aby sprawdzić czy wszystkie obrazy zostały załadowane, init nie wywołuje się po załadowaniu całego obrazu. Wystrzeliwuje przed tym. –

+1

Nie należy używać 'ng-init' dla takich rzeczy: https://docs.angularjs.org/api/ng/directive/ngInit –

+1

@Petr Peller prawdopodobnie, ale to działa – Muhammed

9

Wolę wprowadzenie tego rodzaju kodu w funkcji app.run() z kanciasty.

np.

angular 
.module('testApp', ['someModule']) 
.constant('aConstant', 'hi') 
.config(function($rootProvider) {/*some routing here*/}) 
.run(['$window', function($window) { 
    $window.onload = function() {/*do your thing*/}; 
}]); 

również sprawdzić ten piękny post, że przedstawia kolejność, że niektóre rzeczy dzieją się w kątowym AngularJS app.run() documentation?