【问题标题】:window.onload does not work in AngularJSwindow.onload 在 AngularJS 中不起作用
【发布时间】:2012-10-15 02:05:56
【问题描述】:

此代码在一个简单的 HTML 文件中有效:

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

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

【问题讨论】:

  • 并不是说这两个东西不兼容,但是如果你花时间编写一个 angularJS 应用程序,那么你应该为你的加载函数寻找一个更好的归宿。附加到顶级 HTML 元素的控制器可能会这样做..
  • 我们需要更多信息……一方面。您拥有的代码对我来说完美无缺。另一方面,你想做什么? Roy Truelove 是绝对正确的,你可能不需要在 Angular 应用中使用 window.onload。
  • 感谢@RoyTruelove 和 blesh。我刚刚尝试从 index.html 中执行代码,这次它可以工作了。我不知道发生了什么变化。关于不需要window.onload,您可能是对的。我会尝试另一种方式。

标签: window angularjs onload


【解决方案1】:

我更喜欢将这种代码放在 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*/};
}]);

还可以查看这篇不错的帖子,该帖子描述了某些事情以角度发生的顺序 AngularJS app.run() documentation?

【讨论】:

    【解决方案2】:

    试试

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

    【讨论】:

    • 这也可能是 angular.element($window)。
    • $window 未定义
    • 您是否将它包含在您的依赖项中?例如,控制器必须如下所示:function($scope, $window) { ... }
    【解决方案3】:

    使用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>

    【讨论】:

    • 我也遇到了同样的问题,我正在使用 $window.load 来检查是否所有图像都已加载,所有图像加载后 init 都不会调用。在此之前它会触发。
    • 您不应该将ng-init 用于此类事情:docs.angularjs.org/api/ng/directive/ngInit
    【解决方案4】:

    以下应该有效:

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

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

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

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

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-22
    • 2018-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-07
    相关资源
    最近更新 更多