2015-02-10 2 views
2

Я пытаюсь перенаправить мои пользователь на AngularJS URL стиля:Spring MVC RedirectView в AngularJS URL с параметрами

http://somedomain.com/#/oauth/authorize

И у меня есть некоторые параметры, я добавляю к URL с помощью моей модели. Пока что так стандартно. Вплоть до Spring MVC не имеет темный и зловещий поворот внутри RedirectView в строке 400. Если нажать на эту ссылку, вы увидите свой комментарий:

// Append anchor fragment, if any, to end of URL.

Нет! Это не хорошо для AngularJS! Это сделало бы мой обычно красивый редирект:

http://somedomain.com/#/oauth/authorize?query=params

выглядеть следующим образом:

http://somedomain.com/?query=params#/oauth/authorize

Это плохо Амулет!

Поэтому у меня есть два вопроса:

  1. Какую цель делает это расположение анкерных и запросов Params служат.
  2. Как обойти эту дьявольскую технику?

Спасибо за любую помощь!

ответ

0

Я чувствую, что мне нужно принять душ после этого, но это возможное решение.

Поместите это в свой основной сценарий (то есть app.js) непосредственно перед созданием модуля, в котором вы настраиваете $routeProvider.

var urlLoaded = window.location.href; 
var qIndex = urlLoaded.indexOf('?'); 
var hashIndex = urlLoaded.indexOf('#'); 

if (qIndex !== -1 && hashIndex !== -1 && qIndex < hashIndex) { 

    var correctedPath = urlLoaded.substring(hashIndex); 
    var correctedParams = urlLoaded.substring(qIndex, hashIndex); 
    var base = urlLoaded.substring(0, qIndex); 
    var correctedUrl = base + correctedPath + correctedParams; 

    window.location.href = correctedUrl; 
} 
0
  • Если вы находитесь в ранней стадии, я хотел бы посмотреть в использовании HTML5 PushState. Таким образом, вы можете использовать якоря, как будто они предназначены для использования, и ваш url будет выглядеть более чистым. Для этого существуют ограничения браузера, и другие соображения, но правильное его получение может сэкономить ваше время на линии, чтобы снова работать в этом.

  • Вы можете расширить этот класс, переопределить метод и исправить его, чтобы он был умнее, чем в настоящее время. Зарегистрируйте его с помощью Spring (может потребоваться несколько переопределений, посмотрите ViewControllerRegistry), и если вы чувствуете себя хорошо, отправьте запрос Pull и посмотрите, хотят ли они этого.

  • превзойдет URL обратно в представление в угловом, как @ hartz1989 предложил

  • Вместо того чтобы делать редирект, вы могли бы ответить обратно с помощью параметра запроса, который имеет перенаправлена ​​URL, а также добавить обработчик в угловом, что понимает это и делает «перенаправление». Мне не очень нравится эта идея, но это еще одна идея.

+0

Благодарим за отзыв! PushState в Angular, похоже, не очень нравится с CloudFront от AWS. К сожалению, я не могу переписывать URL. # 2 - это вариант, который я ищу. # 3 - это то, что я принял в качестве краткосрочного решения. # 4 не является вариантом для моего конкретного случая использования, потому что перенаправление находится глубоко в аппарате Spring Security OAuth2.Но я всегда мог отправить запрос на тягу. –

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