¿Qué es el rendimiento “más barato” $ emisión o $ reloj?

Tengo una situación en mi aplicación en la que necesito volver a cargar el menú cada vez que cambia la función del usuario (un usuario puede tener roles en varias empresas).

Me preguntaba cuál es la mejor manera de abordar este problema.

Actualmente estoy haciendo lo siguiente:

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'; } }); }) 

Simple redirigir al usuario a la vista de carga del menú, y desde allí, volver a la vista del menú una vez que la función se haya cargado. Tengo esto envuelto en una función:

  $scope.layout.reloadMenu = function(){ $scope.layout.menuSrc = 'partials/menuLoading.html'; } 

que llamo en cualquier escenario en el que me gustaría volver a cargar el menú.

Me preguntaba si puedo hacer que este proceso sea más automático al transmitir este evento desde el servicio en $ rootScope y luego escucharlo en el controlador.

Cualquier consejo de pensamientos sobre esto será muy apreciado.

$watch() está haciendo dirt-checking: la función hace una comparación de cada ciclo de resumen. Por otro lado, $broadcast() propaga un evento solo cuando hay uno. Naturalmente, $broadcast() es más barato que $watch() .

¿Pero realmente tenías que preocuparte por el rendimiento aquí? Una comparación primitiva por ciclo no es nada. Sin embargo, conceptualmente, $watch() es claramente lo que necesita: desea realizar una acción cada vez que cambia una variable . No me puedo imaginar usando $broadcast() aquí.