window.onload在AngularJS中不起作用

Cur*_*urt 15 window onload angularjs

这个代码在一个简单的HTML文件中工作:

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

但是,如果我将它放入AngularJS Web应用程序的index.html文件中,则不会.有谁知道为什么不呢?

Mo.*_*Mo. 11

用你的功能打电话 ng-init

var app = angular.module('app',[]);
app.controller('myController', function($scope){
    $scope.load = function () {
        alert("load event detected!");
    }
});
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)

  • 您不应将“ ng-init”用于此类用途:https://docs.angularjs.org/api/ng/directive/ngInit (2认同)

Αλέ*_*κος 9

我更喜欢将这种代码放在angular的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*/};
}]);
Run Code Online (Sandbox Code Playgroud)

还检查这篇很好的帖子,描述角度AngularJS app.run()文档中发生的一些事情的顺序 ?


Hei*_*ich 4

以下应该有效:

jQuery(function(){ /** 我的窗口加载函数 **/ })

因为 Angular 使用了 jquery 的子集,所以你也可以包含真实的东西。

更好的是:
您可以考虑使用初始化事物的角度方式,而不是使用它:

那将是: http: //docs.angularjs.org/api/ng.directive :ngInit

< 任何 ng-init="functionInController(something)"...

使其在初始化之前不可见:http://docs.angularjs.org/api/ng.directive :ngCloak

< 任何 ng-斗篷 ......

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

< 任何指令名称....

  • 根据相关的[angularJS文档](https://docs.angularjs.org/api/ng/directive/ngInit),ng-init不应该这样使用。 (2认同)