Если вы используете маршруты, вы можете запускать некоторую логику для каждого изменения маршрута в блоке resolve
в routeprovider.
В приведенном ниже примере я использую пользовательскую службу SystemService, которая сохраняет местоположение и, в свою очередь, передает событие в $rootScope. В этом примере навигация находится за пределами представлений, управляемых маршрутизируемыми контроллерами, и имеет собственный контроллер:
app.config(['$routeProvider',
function($routeProvider) {
$routeProvider.
when('/', {
templateUrl: 'partials/welcome.html',
controller: 'WelcomeCtrl',
resolve: {
load: function(SystemService){
SystemService.fireNavEvent({showNav:false,location:'/'});
}
}
}).
when('/other', {
templateUrl: 'partials/other.html',
controller: 'ElseCtrl',
resolve: {
load: function(SystemService){
SystemService.fireNavEvent({showNav:true,location:'/other'});
}
}
}).
otherwise({
redirectTo: '/'
});
}]);
// в СистемСервис:
function fireNavEvent(obj){
this.showNav = obj.showNav;
$rootScope.$broadcast('navEvent',obj);
}
// затем в навигационном контроллере:
$scope.$on("navEvent", function(evt,args){
$scope.showNav = SystemService.showNav;
// also some logic to set the active nav item based on location
});
Есть и другие способы добиться этого, например, вы можете просто транслировать изменение навигации на $rootScope
непосредственно из конфигурации маршрутов.
Вы также можете ввести $location в свой контроллер и установить видимость на основе этого.
person
Ade
schedule
12.03.2014