Angularjs   发布时间:2022-04-20  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了angularjs – Angular JS viewContentLoaded在初始主页载入上加载两次大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我注意到,在我的初始首页加载中,我的viewContentLoaded正在触发两次,为什么呢?
app.run(function 
    ($rootScope,$log) {
      'use Strict';
      $rootScope.$state = $state;
      $log.warn("gets here");

      $rootScope.$on('$viewContentLoaded',function(){
        $log.warn("gets here2");
      });
    });

输出页面加载

"gets here" 
"gets here2" 
"gets here2"

而我的路由如下

$urlRouterProvider.when('','/');

  // For any unmatched url,send to 404
  $urlRouterProvider.otherwise('/404');

  $stateProvider
    .state('home',{
      url: '/',templateUrl: 'views/search.html',controller: 'SearchCtrl'
    })

我的Index.html

<div id="canvas">
    <ng-include src="'views/partials/header.html'"></ng-include>
    <!-- container -->
    <div ui-view ></div>
    <!-- /container -->
    <ng-include src="'views/partials/footer.html'"></ng-include>
  </div>
它只是uiView指令实现的细节.它在初始化(链接)阶段触发$viewContentLoaded事件.在这一点上,还没有一个国家知道,但事件仍然被解雇.

然后,一旦$状态服务实际解决您的本地状态,事件再次被触发,转换到它,加载模板等.

所以总结一下,它不是因错误的配置,也不是您的模板加载两次.这只是uiView的工作原理.

您甚至可以通过完全注释掉您的状态定义和大部分index.html内容(ui-view本身除外)来进行验证. $viewContentLoaded仍将被触发一次.

代码摘录:

uiView指令声明:

{
    reStrict: 'ECA',terminal: true,priority: 400,transclude: 'element',compile: function (tElement,tAttrs,$transcludE) {
      return function (scope,$element,attrs) {
        ...
        updateView(true);
        ...
      }
    }
 }

updateView函数

function updateView(firstTimE) {
      ...
      currentScope.$emit('$viewContentLoaded');
      currentScope.$eval(onloadExp);
    }

有关更多信息,请参阅GitHub – viewDirective.js上的完整源代码

大佬总结

以上是大佬教程为你收集整理的angularjs – Angular JS viewContentLoaded在初始主页载入上加载两次全部内容,希望文章能够帮你解决angularjs – Angular JS viewContentLoaded在初始主页载入上加载两次所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。