У меня есть этот код...
spa.factory("linkFactory", function() {
var linkFactoryObject = {};
linkFactoryObject.currentLink = "home";
return linkFactoryObject;
});
Этот фрагмент действует как глобальная переменная, которую я устанавливаю и читаю между разными контроллерами. Эта переменная контролирует, какая ссылка отмечена как активная.
Мой код работает очень хорошо. Единственная проблема заключается в том, что если я не установлю начальное значение на заводе, когда вы впервые входите на мою веб-страницу, home
ссылка не будет установлена в активную. Если я задаю начальное значение, тогда, когда кто-то обновит страницу, значение будет сброшено до начального значения. Это означает, что ссылка на главную страницу будет активной, но вы фактически будете на другой странице.
Кроме того, я попытался использовать $location.path()
чтобы получить свой путь и построить функцию с этого значения, но $location.path()
является статическим, так что это тоже не сработает.
У меня есть этот фрагмент маршрута, который контролирует, какой контент я загружаю...
spa.config(function($routeProvider, $locationProvider) {
$routeProvider
.when('/home', {
templateUrl: '/partials/home.html'
})
.when('/about', {
templateUrl: '/partials/about.html'
})
.when('/skills', {
templateUrl: '/partials/skills.html'
})
.when('/experience', {
templateUrl: '/partials/experience.html'
})
.when('/resume', {
templateUrl: '/partials/resume.html'
})
.when('/contact', {
templateUrl: '/partials/contact.html'
})
.otherwise({
redirectTo: '/home'
});
});
Если бы я мог каким-то образом установить здесь переменную, которую я мог бы читать в своих контроллерах, мне было бы хорошо идти, но я не уверен, как это сделать.
Как бы я это сделал?
Вместо регистрации события $ routeChangeStart. Вы также можете определить контроллер по умолчанию, если нет необходимости определять отдельные контроллеры для каждой страницы. А в контроллере вы можете установить значение для текущей ссылки.
Я бы рекомендовал вам просто определить переменную области видимости для этой цели и проверить переменную scope, чтобы установить соответствующий класс в ссылки.
На этом есть хорошая тема.
Попробуй это. Он должен устанавливать URL-адрес маршрута при изменении состояния
spa.factory("linkFactory", function() {
var linkFactoryObject = {};
linkFactoryObject.currentLink = "home";
linkFactoryObject.setRoute = function(route)
{
linkFactoryObject.currentLink = route;
};
return linkFactoryObject;
});
spa.run(['linkFactory','$rootScope',function(linkFactory,$rootScope) {
$rootScope.$on('$routeChangeStart', function(event, next, current) {
linkFactory.setRoute(next.$$route.originalPath);
});
});