Подтвердить что ты не робот

Что такое "дешевая" производительность? $Broadcast или $watch

У меня есть ситуация в моем приложении, где мне нужно перезагружать меню каждый раз, когда меняется роль пользователя (у одного пользователя могут быть роли в нескольких компаниях).

Мне было интересно, как лучше всего подойти к этой проблеме.

в настоящее время я делаю следующее:

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, а затем прослушивая его в контроллере.

Любые мысли\советы по этому поводу будут очень благодарны.

4b9b3361

Ответ 1

$watch() делает проверку грязи: функция делает сравнение каждого цикла дайджест. С другой стороны, $broadcast() распространяется событие только тогда, когда оно есть. Естественно, $broadcast() дешевле $watch().

Но вам действительно нужно было беспокоиться о производительности здесь? Одно примитивное сравнение по циклу - ничто. Однако концептуально $watch() явно то, что вам нужно: вы хотите сделать действие каждый раз, когда переменная изменяется. Я не могу представить здесь $broadcast().