Что такое "дешевая" производительность? $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, а затем прослушивая его в контроллере.
Любые мысли\советы по этому поводу будут очень благодарны.
Ответы
Ответ 1
$watch()
делает проверку грязи: функция делает сравнение каждого цикла дайджест. С другой стороны, $broadcast()
распространяется событие только тогда, когда оно есть. Естественно, $broadcast()
дешевле $watch()
.
Но вам действительно нужно было беспокоиться о производительности здесь? Одно примитивное сравнение по циклу - ничто. Однако концептуально $watch()
явно то, что вам нужно: вы хотите сделать действие каждый раз, когда переменная изменяется. Я не могу представить здесь $broadcast()
.