什么是'更便宜的'性能明智的$广播或$观看
每当用户的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()
。