나는 현재 UI 라우터가 해결을로드하는 순서를 처리하는 방법에 문제가 있습니다. 내가 달성하려는 최종 목표는 데이터를로드하고 저장하고 해당 데이터를 한 번만로드 (요청) 한 다음 서비스를 통해 액세스 할 수있는 서비스를 갖는 것입니다.
현재 구현 방법은 다음 패턴을 따릅니다.
더 높은 수준의 상태 확인에서 서비스에 데이터를로드하도록 지시합니다. 해결 결과는 컨트롤러에 서비스를 삽입하여 데이터에 액세스하기 때문에 하위 서비스의 종속성이 아닙니다. 하위 상태 확인은 이전 상태에서 "프라이밍"된 서비스에 따라 달라질 수 있습니다. 이것은 일반적으로 응용 프로그램을 클릭 할 때 훌륭하게 작동하지만 (즉, 상태 a-> 상태 ab-> 상태 abc) 중첩 상태 (상태 ab 또는 상태 abc)로 직접 이동합니다. 자식 상태가 부모 상태의 해결을 종속성으로 지정하지 않으면 UI 라우터가 순서 해결이 실행되도록 보장하지 않기 때문에 문제가 발생합니다. 아래 예를 참조하십시오.
app.config(function($stateProvider) {
$stateProvider
.state('a', {
url: "/a",
resolve: {
data: function(service) {
return service.getData(); // makes network request
}
}
})
.state('a.b', {
url :"/b",
resolve: {
specificData: function(service) { // if you add data as a dependency here, it works fine
return service.useDataToGetSpecificData(); // doesn't make network request
}
}
})
});
예제에서 사용자가 ab 상태로 직접 이동하면 specificData 확인이 실패합니다. service.useDataToGetSpecificData는 네트워크 요청을하지 않고 현재 서비스에 저장된 데이터에 액세스합니다. 이 호출은 네트워크 요청이기 때문에 상태 a의 확인이 아직 완료되지 않았기 때문에 실패합니다.
해결책은 서비스가 아직 데이터가없는 경우를 처리하고 데이터가있을 때까지 대기하여 관리하도록하는 것입니다. 그러나 서비스가 수행 할 작업에 대해 약간 과장된 느낌이 들고 UI 라우터.
또 다른 해결책 (현재 제가 진행하고있는 것)은 사용되지 않더라도 상태 ab에서 해결의 종속성으로 "데이터"를 추가하는 것입니다. 이로 인해 ab는 a가 결심을 완료 할 때까지 기다려야하며 모든 것이 잘 작동합니다. 그러나 이것은 해킹처럼 느껴지고 매우 직관적이지 않습니다. 이 코드를 모르는 사람은이 사용하지 않는 변수가 ab의 해결에서 선언 된 이유에 대해 머리를 긁적입니다.
종속성을 지정하지 않고 보장되지 않는 해결 순서는 UI 라우터가 동작하도록 작성된 방식이므로 이상하거나 잘못된 작업을해야한다고 생각합니다.
또 다른 해결책 (현재 제가 진행하고있는 것)은 사용되지 않더라도 상태 ab에서 해결의 종속성으로 "데이터"를 추가하는 것입니다. 이로 인해 ab는 a가 결심을 완료 할 때까지 기다려야하며 모든 것이 잘 작동합니다. 그러나 이것은 해킹처럼 느껴지고 매우 직관적이지 않습니다.
이 작업을 수행 하는 일반적인 방법입니다. 일반적으로 하나의 경로에 여러 개의 순차적 해결을 추가하기 위해이 작업을 수행합니다. 예를 들어, 나는 종종 추가 attachUser
, HTTP GET 요청의 약속을 돌려 후크를 다음 다른 isLoggedIn
이 그 attachUser을 종속성으로. 나는 많이 검색했지만 더 나은 것을 찾지 못했습니다. angular의 인젝터를 넘어서는 ui-router에서이 경우에 특별히 쓰여진 것은 없습니다. 귀하의 사례가 상속으로 인해 특별하더라도 여기 및 여기 와 정확히 동일한 문제 입니다.
그래서 뭔가 이상하거나 잘못한 것 같아요.
넌 아니야. 이상하거나 잘못되었다고 생각할 가능성이 큽니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다