2012-09-01 5 views
6

Estoy intentando cambiar el encabezado de página dependiendo de la vista actual. El encabezado está fuera de ngView. ¿Es posible o necesito poner el encabezado dentro de la vista?En AngularJS, ¿puedo usar la ruta actual en ngSwitch fuera de ngView

Mi código es similar a esto:

<div id="header"> 
    <div ng-switch on="pagename"> 
     <div ng-switch-when="home">Welcome!</div> 
     <div ng-switch-when="product-list">Our products</div> 
     <div ng-switch-when="contact">Contact us</div> 
    </div> 
    (a lot of unrelated code goes here)  
</div> 

<div id="content> 
    <div ng-view></div> 
</div> 

Respuesta

1

parece que va a ser diferentes controladores para la cabecera y contenido. La mejor forma de comunicación entre los controladores es el servicio. Otra forma - eventos. See Vojta answer.

9

Puede inyectar el servicio $location y marcar $location.path(). http://docs.angularjs.org/api/ng.$location

JS:

function Ctrl($scope, $location) { 
    $scope.pagename = function() { return $location.path(); }; 
}; 

HTML:

<div id="header"> 
    <div ng-switch on="pagename()"> 
    <div ng-switch-when="/home">Welcome!</div> 
    <div ng-switch-when="/product-list">Our products</div> 
    <div ng-switch-when="/contact">Contact us</div> 
    </div> 
</div> 
10

Dale cada ruta un nombre cuando se está definiendo. Luego, inyecte $ route en el controlador, luego haga que el controlador lo publique en el alcance actual. A continuación, puede vincular el ng-switch a $ route.corriente.nombre

1

Un buen enfoque para resolver esto es tal vez para inyectar $ route en su controlador y luego usarlo para captar el nombre de la ruta actual.

app.controller('YourController', function($scope, $route){ 
    $scope.pagename = $route.current.$$route.name; 
}); 

Y hay que nombrar sus rutas como las siguientes:

app.config(['$routeProvider', 
    function($routeProvider) { 
    $routeProvider. 
     when('/product-list', { 
     templateUrl: 'views/product-list.html', 
     controller: 'ProductsController', 
     name: 'product-list' 
     }). 
     when('/home', { 
     templateUrl: 'views/home.html', 
     controller: 'HomeController', 
     name: 'home' 
     }). 
     otherwise({ 
     redirectTo: '/' 
     }); 
    }]); 

Así que cuando se carga una ruta, el controlador leerá el nombre de la ruta actual y pasarlo a la vista en la variable de nombre de la página . Luego, la vista lo levantará y mostrará la vista correcta que necesite.

Espero que ayude :)

Cuestiones relacionadas