一尘不染

什么是“更便宜”的性能明智的$ broadcast或$ watch

angularjs

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

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

目前,我正在执行以下操作:

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

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


阅读 191

收藏
2020-07-04

共1个答案

一尘不染

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

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

2020-07-04