AngularJs $location.path с полным URL-адресом
Я хочу направить пользователя на URL-адрес, если он щелкнет ok в модальном режиме. В моем контроллере я получаю URL-адреса, например
var newUrl = http://localhost:3000/#/dashboard
var newUrl = http://localhost:3000/#/users
как переменная.
Если i, то используйте
$location.path(newUrl);
он не работает. Я также пробовал
$location.url(newUrl);
но мой URL-адрес закодирован таким образом.
http://localhost:3000/#/#%2Fdashboard
Есть ли способ получить только путь к URL?
Изменить
этот код является частью службы. Пользователь делает некоторые входы в форме и нажимает на другую ссылку, например, в меню. Затем появляется всплывающее окно, где ему предлагается пропустить изменения формы. Если он нажимает "да", я получаю запрошенный url. Это из моей среды разработки на сервере, конечно, это будет другой URL-адрес. Поэтому я не могу просто использовать
$location.path("/users")
например
Ответы
Ответ 1
Я столкнулся с этой проблемой при наличии событий Angular preventDefault $locationChangeStart, принудительного сохранения и перенаправления при успешном завершении. Я определяю следующую функцию в теле контроллера:
var baseLen = $location.absUrl().length - $location.url().length;
function getPath(fullUrl) {
return fullUrl.substring(baseLen);
}
Это не похоже на чистое решение, но, как работа, он выполняет эту работу. RegEx может работать лучше для вас, если вы не знаете, что ваши URL-адреса указывают на один и тот же сайт.
Ответ 2
Вы можете использовать $location.absUrl()
.
См. официальную документацию: введите ссылку здесь
Этот метод является только получателем.
Возвращает полное представление url со всеми сегментами, закодированными в соответствии с правилами, указанными в RFC 3986.
Ответ 3
Могу ли я предложить другое решение:
$scope.$on('$locationChangeStart', function(e) {
if (meetsTheRequirementsToLeave()) {
return;
}
var newPath = $location.path();
e.preventDefault();
checkIfUserWantsToLeave().then(function() {
$location.path(newPath);
});
});
Внутри этого события $location.path()
возвращает новый путь.