2016-07-27 2 views
0

내 애플리케이션에서 URL에 검색어 문자열 (사용자 입력 검색 문자열)을 저장합니다. model={query: 'blabla'}이 있고 $location.search(model)을 사용하여 URL을 내 매개 변수로 업데이트합니다. 새로 고침을 누르거나 다른 상태로 돌아와서 돌아 왔을 때 $stateParams.query을 사용하여 쿼리 매개 변수를 얻은 다음 검색 상자 모델에 할당합니다.

다음과 같은 시나리오를 생각해보십시오 :

사용자 검색 : aa/bb/login?f=Student%20Home11

의 URL : ...?query=aa%2Fbb%2Flogin%3Ff%3DStudent%2520Home11

(즉 슬래시가 % 2F로 인코딩, 그리고 % 20 % (2520)로 인코딩되어 있습니다, 왜냐하면 % 20은 사용자가 입력 한 리터럴 구문이므로 인코딩 된 공간이 아닙니다.)

문제 :

다음과 같은 (이들 상태 사이에서 전환 할 때 URL의 값을 유지하기 위해) UI 라우터에서의 상태 PARAMS에 query있는 다른 상태로 이동 한 후에 다시 탐색 :

$stateParams.query: AA % 2Fbb % 2Flogin % 3FF % 3DStudent % 20Home11` %2520%20 디코딩되었지만 다른 인코딩 (%2F)는 부호화 머문 같은 경우

. 그런 다음 디코드하면 검색 상자에 공백이 생깁니다 ( %20 대신). 두 번째 시나리오에서

, 타격 후가 (URL이 분명히 동일하게 유지) 새로 고침 :

$stateParams에 : aa/bb/login?f=Student%20Home11 해야으로 - 모든 슬래시 디코딩하고, 또한 '%'기호를 디코딩되었지만 '% 20'은 그대로 유지됩니다 %20.

이상한 행동을 유발하는 상태 전환에서 어떤 현상이 발생 했습니까?

답변

0

음, 문제가 발견되었습니다. 상태간에 이동하기 위해 $state.go()을 사용했을 때 상태간에 $ stateParams를 보내지 않았으므로 다른 상태에서 돌아 왔을 때 상태에서 매개 변수를 가져 오는 대신 URL 매개 변수를 구문 분석했을 수 있습니다. 지금 해봐.

관련 문제