Qu'est-ce que 'moins cher', au niveau des performances $diffusion $ou regarder
J'ai une situation dans mon application, où j'ai besoin de recharger le menu à chaque fois le rôle des modifications de l'utilisateur(Un utilisateur peut avoir des rôles dans plusieurs entreprises).
Je me demandais quelle est la meilleure façon d'aborder cette question.
actuellement, je suis en train de faire les suivants:
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 redirection de l'utilisateur vers le menu de chargement de la vue, et à partir de là, retour à l'affichage du menu une fois le rôle est fini de se charger.
J'ai ce enveloppé dans une fonction:
$scope.layout.reloadMenu = function(){
$scope.layout.menuSrc = 'partials/menuLoading.html';
}
que j'appelle à tout scénario à qui je voudrais recharger le menu.
Je me demandais si je peux rendre ce processus plus automatique par la diffusion de cet événement à partir du service sur l' $rootScope, puis l'écouter dans le contrôleur.
Toutes les pensées\conseils sur ce qui sera grandement apprécié.
Vous devez vous connecter pour publier un commentaire.
$watch()
est en train de faire de la saleté de vérification: la fonction fait une comparaison de chaque digérer cycle. D'autre part,$broadcast()
propage un événement uniquement lorsqu'il y en a un. Naturellement,$broadcast()
est moins cher que$watch()
.Mais avez-vous vraiment avoir à vous soucier de la performance ici? Une primitive de la comparaison par cycle n'est rien. Toutefois, sur le plan conceptuel,
$watch()
est clairement ce dont vous avez besoin: vous voulez faire une action chaque fois qu'une modification de la variable. Je ne peux pas imaginer à l'aide de$broadcast()
ici.$watch
ou$broadcast
dans le contrôleur, en premier lieu, plutôt OP doivent envelopperauthService
dans Angulaire de service ou, mieux encore, un$q
promesse.