原生javascript、angularjs、angular2分别是如何监控DOM加载完成

1、问题:原生javascript、angularjs、angular2分别是如何监控页面加载
在上一节中介绍了原生的angularjs实现拖拽布局,但在实际的开发中需要适配自己项目中的页面,
对页面中的每个模块需要在初始化的时候取得相应的元素,此时遇到的问题就是页面DOM未渲染完成,
getElementsByClassName得到的都是空值,由此引出angularJs中如何监控页面加载完成。
本文根据实际开发中总结出,原生js、angularjs、angular2分别是如何监控页面加载完成的。
2、    解决方法
    2.1 原生js监控页面加载完成----DOMContentLoaded
当初始的 HTML 文档被完全加载和解析完成之后,DOMContentLoaded 事件才被触发,而无需等待样式表、图像和子框架的完成加载。
另一个不同的事件 load 应该仅用于检测一个完全加载的页面。
在使用 DOMContentLoaded 更加合适的情况下使用 load 是一个令人难以置信的流行的错误,所以要谨慎。
注意:DOMContentLoaded 事件必须等待其所属script之前的样式表加载解析完成才会触发。
示例:

<link rel="stylesheet" href="css.php">
<script>
document.addEventListener('DOMContentLoaded',function(){
    console.log('3 seconds passed');
});
</script>
<script>
  document.addEventListener("DOMContentLoaded", function(event) {
      console.log("DOM fully loaded and parsed");
  });

  for(var i=0; i<1000000000; i++){
      // 这个同步脚本将延迟DOM的解析。
      // 所以DOMContentLoaded事件稍后将启动。
  }
</script>

2、2 angularJs框架监控页面加载完成----$viewContentLoad
这个涉及到angular $digest的生命周期,包括angularJs在引擎下如何工作的、如何双向绑定等等,具体原因这里不详述。
介绍几种解决方法:
    (1) 在controller里面利用$on或者$watch

$scope.$on('$viewContentLoaded', function() {  
    alert('1');  
});  

$scope.$watch('$viewContentLoaded', function() {  
    alert('1');  
});


    (2)$timeout的方法(不建议使用)
    在方法中$timeout中内容会最后执行,相当于dom加载完再执行.
    $timeout(function () {
        var tabContent = document.getElementsByClassName("tab-content");
        tabContent[0].style.height = 520+ 'px';
    })
    2、3 angular2框架监控页面加载完成----组件的生命周期钩子ngAfterContentInit
    组件的生命周期是由angular2内部管理,从组件的创建、渲染,到数据变动事件的触发,再到组件从DOM中移除,angular2都提供了一系列的钩子,这些钩子包括
    ngOnChanges
    ngOnInit
    ngDoCheck
    ngOnDestroy
    ngAfterContentInit
    ngAfterContentChecked
    ngAfterViewInit
    ngAfterViewChecked
    通过这些钩子可以让开发者非常方便的在这些事件触发时,执行相应的回调函数。
    其中ngAfterViewInit - 组件相应的视图初始化之后调用。
    在组件相应的视图初始化之后调用,它主要用于获取通过 @ViewChild 或 @ViewChildren 属性装饰器查询的视图元素。
初始化完组件视图及其子视图之后调用。第一次ngAfterContentChecked()之后调用,只调用一次。
通过在该钩子下去执行可取得需要的元素,轻松解决问题解决问题。

猜你喜欢

转载自blog.csdn.net/shoushou71/article/details/87458700
今日推荐