什么是'更便宜的'性能明智的$广播或$观看

每当用户的angular色发生变化(一个用户可以在多个公司中担任angular色)时,我的应用程序中需要重新加载菜单。

我想知道什么是解决这个问题的最好方法。

目前我正在做以下工作:

app.controller('menuLoadingCtrl', function($location, $scope, authService){ $scope.model.initialRole = authService.getRole(); $scope.$watch(function(){return authService.getRole()}, function(val){ if(val && val != $scope.model.initialRole){ $scope.layout.menuSrc = 'partials/menu.html'; } }); }) 

简单地将用户redirect到菜单加载视图,并从那里回到菜单视图,一旦angular色完成加载。 我有这个包装在一个函数:

  $scope.layout.reloadMenu = function(){ $scope.layout.menuSrc = 'partials/menuLoading.html'; } 

我打电话在任何情况下,我想重新加载菜单。

我想知道是否可以通过从$ rootScope上的服务广播这个事件,然后在控制器中监听它来使这个过程更加自动化。

任何想法\build议,将不胜感激。

$watch()正在进行污染检查:function比较每个消化周期。 另一方面, $broadcast()只在有事件的时候传播一个事件。 自然, $broadcast()$watch()便宜。

但是你真的不得不担心这里的表演吗? 一个循环的原始比较是没有的。 然而,从概念上讲, $watch()显然是你所需要的: 每当variables发生变化时,你想要做一个动作。 我无法想象在这里使用$broadcast()