2012-10-24 15 views
14

Questo codice in un semplice file HTML funziona:window.onload non funziona in AngularJS

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

Tuttavia, se l'ho messo nel file index.html di una web app AngularJS, non è così. Qualcuno sa perché no?

+1

Non dire le due cose sono incompatibili, ma se si sta prendendo il tempo di scrivere un app angularJS poi si dovrebbe probabilmente cercare di trovare una casa migliore per la funzione di carico. Un controller collegato all'elemento HTML di livello superiore potrebbe farlo .. –

+1

Abbiamo bisogno di più informazioni ... per una cosa. Il codice che hai funziona perfettamente per me. Per un'altra cosa, cosa stai cercando di fare? Roy Truelove ha assolutamente ragione, probabilmente non hai bisogno di usare una window.onload in un'app angolare. –

+0

Grazie a @RoyTruelove e blesh. Ho appena provato ad eseguire il codice da index.html e questa volta funziona. Non ho idea di cosa sia cambiato.Probabilmente hai ragione sul non aver bisogno di window.onload. Proverò in un altro modo. – Curt

risposta

4

il seguente dovrebbe funzionare:

jQuery (function() {/ ** mie funzioni finestra onload ** /})

dal angolare utilizza un sottoinsieme di jquery comunque anche voi può includere la cosa reale.

meglio ancora:
Invece di utilizzare questo, potete prendere in considerazione il modo angolare di cose Inizializzando:

che sarebbe: http://docs.angularjs.org/api/ng.directive:ngInit

< qualsiasi ng-init = "functionInController (qualcosa) "...

per renderlo invisibile fino a init: http://docs.angularjs.org/api/ng.directive:ngCloak

< qualsiasi ng-mantello .....

per inizializzare/personalizzare intere parti: http://docs.angularjs.org/guide/directive

< qualsiasi direttiva nome ....

+0

Grazie aHeinrich per il tuo suggerimento. Sono nuovo di AngularJS, quindi potrebbe volerci un po 'per capire, ma probabilmente vale la pena di verificare. – Curt

+0

potresti voler controllare questo: http://stackoverflow.com/questions/12922532/breaking-html-into-management-templates-for-angularjs/12923289#12923289 – Heinrich

+2

ng-init non dovrebbe essere usato in questo modo secondo la relativa [documentazione di angularJS] (https://docs.angularjs.org/api/ng/directive/ngInit). – Pak

3

Prova

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

Questo potrebbe anche essere angular.element ($ window). – iamdash

+0

@iamdash: risolto questo problema, thx –

+0

$ window non è definito – ryaz

10

Chiama la funzione con 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

Ho anche lo stesso problema, sto usando $ window.load per controllare se tutte le immagini sono stati caricati, init non chiama dopo tutto il caricamento dell'immagine. Spara prima. –

+1

Non si deve usare 'ng-init' per cose del genere: https://docs.angularjs.org/api/ng/directive/ngInit –

+1

@Petr Peller probabilmente, comunque funziona – Muhammed

9

preferisco mettere questo tipo di codice nella funzione app.run() di angolare.

ad es.

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

controllare anche questo bel post che raffigura l'ordine che alcune cose accadono in angolare AngularJS app.run() documentation?

Problemi correlati