2012-11-17 27 views
20

Ho un controller che mostra un menu di navigazione della pagina. Il menu ha una serie di elementi e ogni elemento ha una didascalia e un link. Ho anche messo una bandiera su ogni elemento che indica se la pagina relativa è attualmente mostrato:come rilevare la modifica della posizione

module.controller('MenuContr', [ 
    /******/ '$scope', '$location', 
    function ($scope, $location) { 
     $scope.items = [ 
      {text: 'page 0', 
      href: '#/page-0', 
      current: $location.path() === '/page-0'}, 
      {text: 'page 1', 
      href: '#/page-1', 
      current: $location.path() === '/page-1'} 
     ]; 

nel mio modello:

<ul class="menu" ng-controller="MenuContr" ng-cloak> 
    <li ng-repeat="item in items" ng-switch on="item.current"> 
    <span class="current" ng-switch-when="true">{{item.text}}</span> 
    <a ng-switch-default ng-href="{{item.href}}">{{item.text}}</a> 
    </li> 
</ul> 

ho bisogno di essere in grado di aggiornare il menu quando cambia posizione, Com'è fatto? C'è un evento a cui posso iscrivermi?

MODIFICA: questo controller viene utilizzato in aggiunta ai controller definiti nei percorsi e il modello sopra riportato è posizionato sopra l'elemento contenente la direttiva ng-view.

risposta

21

a rispondere alla mia domanda, a mio MenuContr:

 $scope.$on('$routeChangeSuccess', function() { 
      var items = $scope.items; 
      var path = $location.path(); 

      for (var i = 0; i < items.length; i++) { 
       var item = items[i]; 
       var href = item['href']; 
       item['current'] = !!href && href.substring(1) === path; 
      } 
     }); 
+1

Qual è la differenza tra mettere utilizzando $ scope e $ rootScope per questo? Nel caso in cui questa fosse una direttiva lanciata attraverso l'applicazione, useresti $ rootScope? – Winnemucca

0

Vieni a stesso controller sul cambiamento percorso? È così definito in $ routeProvider in AppsModule.config? È possibile passare $ routeParams allo stesso controller, se si desidera un ulteriore filtraggio.

È stato inizializzato l'oggetto all'inizio del controller. Quindi, una volta modificato il collegamento, verrà chiamato lo stesso controller e non sarà necessario eseguire altre operazioni. In base al percorso selezionato, gli elementi verranno aggiornati.

+0

grazie. Ho modificato la mia domanda. No, questo non è in un controller che viene utilizzato in una rotta. È separato – akonsu

Problemi correlati