AngularJS로 작성된 단일 페이지 응용 프로그램과 ui-router를 사용하여 상태 전이 (라우팅)를 관리합니다.경로 변경간에보기 (컨트롤러) 상태를 유지하는 방법은 무엇입니까?
function config($stateProvider) {
$stateProvider
.state('social.search', {
url: '/search',
templateUrl: 'views/social/search/social-search-view.html',
controller: 'SocialSearchController',
controllerAs: 'vm'
});
}
이보기는 형태와 컨트롤러 (SocialSearchController
),이 입력을 받고 서비스로 제출 중 및 결과를 표시 돌봐를 렌더링 :
은 다음과 같이 구성 검색 상태가 있습니다. 결과 목록은 사용자에게 순위가 매겨진 목록 (예 : Google의 검색 결과 페이지)으로 표시됩니다. 그것은 social.search
의 아이가 아닌 있도록 social.profile
상태, 응용 프로그램의 다른 부분에 사용되는
<a ui-sref="social.profile({personId: person.id})">{{person.name}}</a>
: 각각의 결과는, 예를 들어, 항목에 대한 자세한 정보를 표시하기 위해 새로운 상태로 갈 수있는 링크가 다음과 같이 구성됩니다.
function config($stateProvider) {
$stateProvider.state('social.profile', {
url: '/{personId}',
templateUrl: 'views/social/profile/social-profile-view.html',
controller: 'SocialProfileController',
controllerAs: 'vm'
});
}
괜찮 으면 검색 결과를 입력 한 다음 항목을 클릭하여 항목에 대한 자세한 정보를 확인할 수 있습니다. 그러나 뒤로 버튼을 눌러 상세보기에서 검색보기로 전환하면 입력 및 검색 결과가 사라집니다. 컨트롤러를 더 이상 사용하지 않으면 컨트롤러를 메모리에 둘 필요가 없으므로 이것이 기본 동작이며 올바른 동작이라는 것을 알고 있습니다.
이 시나리오에서는 제어기가 메모리에 머물러 있기를 원하는데, 사용자는 쿼리를 다시 입력하고 검색 서비스에 대한 다른 요청을 할 필요가 없습니다.
검색 상태를 서비스에 저장하고 컨트롤러가 마지막 컨트롤러의 상태를 저장하는 캐시 서비스와 같은 초기 상태를 잡아낼 수 있다고 생각할 수 있습니다. 그러나이 동기화 프로세스에 관련된 버그에 취약합니다. 자동 완성 및 태그 입력란 (사용자 지정 지시문)이 포함되어 있으므로 검색 양식이 약간 복잡하므로 적어도 세 개의 "레이어"를 통해 동기화가 이루어집니다. : 컨트롤러 상태, 캐시 서비스, 사용자 정의 입력.
올바른 방법입니까? 내 옵션은 무엇입니까?
검색 결과 ('/ search/{searchString}')에 대한 다른보기를 추가하는 방법은 무엇입니까? 양식이 해당보기에 "제출"되고 프로필보기의 뒤로 단추가 작동합니다. – richardtz
단일 검색 문자열보다 많은 필드가 있지만 경로 URL의 입력 상태를 유지하기 위해 귀하의 요점을 얻습니다. 이렇게하면 사용자가 다시 입력하는 것을 피할 수 있지만 검색 서비스 (백엔드)가 결과 목록을 다시 채우도록 요청할 것입니다. –
요청을 다시 작성하면 올바르다 고 생각합니다 (예를 들어 새로운 결과가 표시 될 수 있음).하지만 요구 사항에 따라 달라질 수 있습니다. – richardtz