2012-10-24 75 views
14

此代碼:在window.onload不以簡單的HTML文件工作,AngularJS

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

但是,如果我把它變成一個AngularJS的Web應用程序的index.html文件,它沒有。有人知道爲什麼不?

+1

不是說兩個東西是不兼容的,但如果你花時間來寫一個angularJS應用程序,然後你應該看起來爲您的加載功能找到一個更好的家。連接到頂層HTML元素的控制器可能會這樣做。 –

+1

我們需要更多的信息.​​.....一件事。您的代碼完美無瑕地爲我工作。另一件事,你想做什麼? Roy Truelove是絕對正確的,你可能不需要在角度應用中使用window.onload。 –

+0

謝謝@RoyTruelove和blesh。我只是嘗試從index.html執行代碼,並且這次它工作。我不知道發生了什麼變化。你可能是正確的不需要window.onload。我會嘗試另一種方式。 – Curt

回答

4

下面應該工作:

的jQuery(函數(){/ **我的窗口的onload功能** /})

因爲角用了jQuery的一個子集,反正你也可能包括真實的東西。

更好的是:
而不是使用這個的,你可以考慮使用的初始化的東西角方式:

,這將是:http://docs.angularjs.org/api/ng.directive:ngInit

<任何NG-的init =「functionInController (東西)「...

使其不可見,直到init:http://docs.angularjs.org/api/ng.directive:ngCloak

<任何NG-斗篷.....

初始化/定製整體部分:http://docs.angularjs.org/guide/directive

<任何指令名....

+0

謝謝@海因裏希的建議。我是AngularJS的新手,所以我可能需要一段時間才能弄清楚,但這可能值得一試。 – Curt

+0

你可能想看看這個:http://stackoverflow.com/questions/12922532/breaking-html-into-management-templates-for-angularjs/12923289#12923289 – Heinrich

+2

ng-init不應該像這樣使用根據相關的[angularJS文檔](https://docs.angularjs.org/api/ng/directive/ngInit)。 – Pak

3

試試

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

這也可以是angular.element($ window)。 – iamdash

+0

@iamdash:修正了這個問題,thx –

+0

$窗口未定義 – ryaz

10

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

我也有同樣的問題,我使用$ window.load來檢查是否所有的圖像已加載,所有映像加載後init都不會調用。它在此之前開火。 –

+1

你不應該使用'ng-init'這樣的東西:https://docs.angularjs.org/api/ng/directive/ngInit –

+1

@Petr Peller可能,但它可以工作 – Muhammed

9

我更喜歡把這種代碼在角的app.run()函數調用你的函數。

例如

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

還要檢查這個好貼,描述的順序,有些事情發生在角 AngularJS app.run() documentation?