У меня есть Угловое приложение, которое разделено на несколько небольших приложений. Система работает довольно просто: пользователь входит в систему, затем он может выбрать, какое суб-приложение он хочет использовать.
Я бы хотел отобразить имя приложения в заголовке. В .run
у меня это на $rootscope
. Причина, по которой я здесь говорю, проста: пользователь может нормально использовать приложение, но он также может решить только использовать F5 для обновления страницы. Таким образом, я могу решить по URL-адресу, приложение которого работает.
$rootScope.$on( '$stateChangeStart', function(e, toState, toParams, fromState, fromParams) {
// bunch of other code
var path = $location.path();
console.log($location);
if (path.indexOf("pricelist") > -1) {
authentication.setApplication("PRICELIST");
} else {
authentication.setApplication("HUB");
}
$state.go(toState, toParams);
}
}
});
});
Если URL-адрес содержит "прейскурант", он должен установить имя приложения "PRICELIST". Однако этот оператор возвращает false и поэтому устанавливает неправильное имя.
После отладки я заметил что-то странное в $location
:
Как вы видите, есть два $$path
: один с правильным URL-адресом и один с просто /
. Правильный - тот, который содержит /pricelist
, но $location.path()
кажется, возвращает неверный.
Что здесь происходит? Что я делаю не так?
Поскольку вы слушаете событие $stateChangeStart
, путь $location.path()
по-прежнему является текущим путем, а не тем путем, по которому он идет.
Вы должны проверить аргумент toState
.