2013-11-30 5 views
26

Я хочу перенаправить пользователя на URL-адрес, если он нажимает ok в модальном режиме. В моем контроллере я получаю URL-адреса, например

var newUrl = http://localhost:3000/#/dashboard 

var newUrl = http://localhost:3000/#/users 

как переменная.

Если я затем использовать

$location.path(newUrl); 

он не работает. Я также пробовал

$location.url(newUrl); 

, но мой URL-адрес кодируется таким образом.

http://localhost:3000/#/#%2Fdashboard 

Есть ли способ получить только путь к URL-адресу?

Редактировать

этот код является частью службы. Пользователь делает некоторые входы в форме и нажимает на другую ссылку, например, в меню. Затем появляется всплывающее окно, где ему предлагается пропустить изменения формы. Если он нажимает «да», я получаю запрошенный url. Это из моей среды разработки на сервере, конечно, это будет другой URL-адрес. Так что я не могу просто использовать

$location.path("/users") 

, например

+0

Просто выполните: '$ location.path ('/ users')' или 'newUrl = '/ users'' – Mik378

+2

Да, это работает, но я получаю полный URL-адрес в качестве параметра. –

+1

Я сообщил об этой проблеме: https://github.com/angular/angular.js/issues/8617 – JohnC

ответ

21

Я столкнулся с этой же проблемой при наличии события Угловой preventDefault $ locationChangeStart, силы ворот, и только перенаправлять на успех. Я определим следующую функцию в теле контроллера:

var baseLen = $location.absUrl().length - $location.url().length; 
function getPath(fullUrl) { 
    return fullUrl.substring(baseLen); 
} 

Это не похоже, чистое решение, но как работа вокруг, это делает работу. RegEx может работать лучше для вас, если вы не знаете, что ваши URL-адреса указывают на один и тот же сайт.

10

Вы можете использовать $location.absUrl().

Смотрите официальную документацию: enter link description here

Этот метод является добытчик только.

Вернуться полный URL представление со всеми сегментами, закодированных в соответствии с правилами, указанными в RFC 3986.

+13

Как вы говорите, absUrl - это геттер, а не сеттер, так как это отвечает на вопрос ?! – Sebastian

5

Могу ли я предложить другое решение:

$scope.$on('$locationChangeStart', function(e) { 
     if (meetsTheRequirementsToLeave()) { 
     return; 
     } 
     var newPath = $location.path(); 
     e.preventDefault(); 
     checkIfUserWantsToLeave().then(function() { 
     $location.path(newPath); 
     }); 
    }); 

В пределах этого события $location.path() возвращает новый путь.

+0

Это, безусловно, самое чистое решение +1 –

Смежные вопросы