2013-10-09 2 views
0

Je ne suis pas sûr que je fais ce que je dois dans le droit chemin ... J'ai 2 contrôleurs:contrôleurs AngularJS communication

SiteMenuCntl et DashboardCntl

SiteMenuCntl est lié à un Étiquette UL, et c'est le menu du site. Par défaut, il est caché, et après la vérification des informations d'identification et le DashboardCntl est chargé le menu devrait être visible.

J'ai essayé ceci:

app.controller('SiteMenuCntl', ['$scope', 'site', 'security', '$log', function ($scope, site, security, $log) { 
    $scope.visibility = "hidden"; 
    $scope.$on('showTree', function() { 
     console.log("event fired"); //never fired :-(
     $scope.visibility = ""; 
    }); 
}]); 

app.controller('DashboardCntl', ['$scope', function ($scope) { 
    $scope.$emit('showTree'); 
}]); 

mais le showTree de l'événement est jamais tiré. Où est-ce que je fais mal? Y a-t-il une meilleure façon de faire cela?

Répondre

1

Je devine votre SiteMenuCntl est dans l'arbre de la portée de la DashboardCntl donc quand $emit déclenche vers le haut (vers $rootScope), il ne parvient pas à SiteMenuCntl. Utilisez à la place $rootScope.$broadcast('showTree'). Cela se déclenche du haut de l'arbre vers le bas à travers toutes les portées d'écoute.

+0

merci, ça a marché! –

0

il y a un moyen plus facile de le faire;

pourquoi ne pas vous définissez un $scope.showSiteMenuCntl=false; booléen dans votre contrôleur et puis quand vous voulez montrer que vous allez $scope.showSiteMenuCntl=true;

puis dans votre code html vous allez;

<ul ng-controller="SiteMenuCntl" ng-show="showSiteMenuCtrl"></ul> 
+0

parce showSiteMenuCtrl doit être fixé par DashboardCntl (quand il est chargé) non par SiteMenuCntl. –

+0

Ok, désolé. Je suppose que je n'ai pas lu toute la question, c'est une suggestion si – pythonian29033

+0

oui, je vais utiliser ng-show au lieu de contrôler une classe css, merci. –

Questions connexes