42

我在我的应用程序中遇到一种情况,每次用户角色发生变化时我都需要重新加载菜单(一个用户可以在多家公司担任角色)。

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

目前我正在做以下事情:

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 上的服务广播此事件,然后在控制器中收听它来使此过程更加自动化。

对此的任何想法\建议将不胜感激。

4

1 回答 1

55

$watch()正在做污垢检查:该函数在每个摘要周期进行比较。另一方面,$broadcast()仅在有事件时才传播事件。自然$broadcast()是比 便宜$watch()

但是你真的需要担心这里的性能吗?一个原始的循环比较什么都不是。但是,从概念上讲,$watch()这显然是您需要的:每次变量更改时您都希望执行一个操作。我无法想象$broadcast()在这里使用。

于 2013-10-27T09:38:18.550 回答