我的应用程序中有一种情况,每次用户角色更改时,我都需要重新加载菜单(一个用户可以在多家公司中担任角色)。
我想知道什么是解决此问题的最佳方法。
目前,我正在执行以下操作:
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'; } }); })
简单地将用户重定向到菜单加载视图,然后在角色完成加载后从那里返回菜单视图。我把它包装在一个函数中:
$scope.layout.reloadMenu = function(){ $scope.layout.menuSrc = 'partials/menuLoading.html'; }
在我想重新加载菜单的任何情况下都可以调用它。
我想知道是否可以通过从$ rootScope上的服务广播此事件,然后在控制器中侦听该事件,从而使此过程更加自动化。
任何对此想法/建议将不胜感激。
$watch()正在进行污垢检查:该功能在每个摘要周期进行比较。另一方面,$broadcast()仅在有事件时传播事件。自然,$broadcast()它比便宜$watch()。
$watch()
$broadcast()
但是您真的要担心这里的性能吗?一个按周期进行的原始比较是一无所获。但是,从概念上讲,$watch()这显然是您所需要的:您希望 每次变量更改时 都执行一个操作。我无法想象$broadcast()在这里使用。