我有一个非常简单的设置两个选项卡,主页和管理:
$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/