У меня есть контроллер:
app.controller('NavbarController', ['$scope', '$route', function($scope, $route) {
console.log($route);
console.log($route.current)
}]);
Но когда я пытаюсь использовать $route.current
я получаю неопределен, я понятия не имею, почему, как $ маршрут имеет propety, когда я console.log($route)
у меня есть
.when('/', {
templateUrl: '/home',
controller: 'HomeController',
activeTab: 'home'
}).
Мне нужно получить доступ к $route.current.$$route.activeTab
, чтобы я мог получить переменную и установить соответствующий класс.
Полный контроллер:
var app = angular.module('PugIt', ['ngRoute', 'ui.bootstrap'])
app.config(function($routeProvider) {
$routeProvider
.when('/', {
templateUrl: '/home',
controller: 'HomeController',
activeTab: 'home'
}).
when('/help', {
templateUrl: '/help',
controller: 'HelpController',
activeTab: 'help'
}).
when('/donate', {
templateUrl: '/donate',
controller: 'DonateController',
activeTab: 'donate'
}).
when('/server', {
templateUrl: '/server',
controller: 'ServerController',
activeTab: 'server'
}).
when('/server/new', {
templateUrl: '/server/new',
controller: 'NewServerController',
activeTab: 'serverNew'
}).
otherwise({
redirectTo: '/'
});
});
app.controller('HomeController', ['$scope', '$route', function($scope, $route) {
}]);
app.controller('HelpController', ['$scope', '$route', function($scope, $route) {
}]);
app.controller('DonateController', ['$scope', '$route', function($scope, $route) {
}]);
app.controller('ServerController', ['$scope', '$route', function($scope, $route) {
}]);
app.controller('NewServerController', ['$scope', '$route', function($scope, $route) {
}]);
app.controller('NavbarController', function($scope, $rootScope) {
$route.activeTab = $route.current.$$route.activeTab;
});
Который затем устанавливает активный класс с:
// Navbar
<div ng-controller="NavbarController">
<li ng-class="{'active': activeTab == 'home'}"><a href="#/">Home</a></li>
</div>
// End of Navbar
<div ng-view></div>
Я думаю, что объект фактически не регистрируется в этой ситуации, а объект ** эталонным ** регистрируется. Поэтому, если ссылка на объект изменяется после 'console.log ($ route.current)', консоль покажет обновленный объект. –
setTimeout(), ха-ха - просто шучу, я работаю над приложением, где это было решением всего. –
@ Datsik, ну где же именно этот «NavbarController» «живет»? Он живет вне 'ng-view'? –