angularjs - $viewContentLoaded 在 Angular ngRoute 应用程序中被多次触发

标签 angularjs dom-events ngroute

我有一个非常简单的设置两个选项卡,主页和管理:

  $routeProvider
             // route for the home page
             .when('/home', {
             templateUrl : 'views/home.html',
             controller  : 'myCtrl',
             controllerAs: 'vm',
             resolve:{
                 loadDropDowns:function(DataSvc,$rootScope){
                    
                        return DataSvc.GetDropDowns();
                    
                 }
             }
         })
         // route for admin page
         .when('/admin',{
             templateUrl : 'admin/templates/admin.html'             
         })

在 Controller 中,我有一个 $viewContentLoaded 事件的监听器 像这样:

$rootScope.$on('$viewContentLoaded', function(event){
        console.log(" viewContentLoaded fired ");
      });

每次我单击主页选项卡时,事件处理程序都会触发双倍,因此第一次是 2 ,而不是 4 ,而不是 8 等等......

加载下拉菜单时,我会广播另一个事件,对于一个广播事件,我还会多次触发处理程序。

 $rootScope.$broadcast('dropDownsSet');

并且在同一个 Controller 中:

    $rootScope.$on('dropDownsSet', function(event, mass) {}

也被执行多次..(与上面相同,每次将事件处理程序触发的次数加倍)

我束手无策,这疯狂的原因可能是什么?

最佳答案

移动事件绑定(bind)代码

$rootScope.$on('$viewContentLoaded', function(event){
  console.log(" viewContentLoaded fired ");
});

myCtrl Controller 到某些主应用程序(父) Controller 。现在发生的情况是,每次导航到“主页”选项卡时,myCtrl 都会被实例化,从而在 $rootScope 上再注册一个事件监听器。

关于angularjs - $viewContentLoaded 在 Angular ngRoute 应用程序中被多次触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36356749/

相关文章:

javascript - 打开 md-calendar 时滚动到当前日期

javascript - Angular.js 路由不工作

javascript - Angular Material 复选框

javascript - Bootstrap 模式对话框中的默认按钮

javascript - 如何在 Angular 中绑定(bind) map 的键

Angularjs RouteProvider 多个路由导致相同的 View

javascript - ngHide 指令仅在页面刷新后适用于 ngRoute 模块

javascript - 添加同类事件是否会追加或覆盖之前添加的同名事件?

javascript - 在 JavaScript 中模拟输入

javascript - 为什么我的方法看不到 this.property?