2017-03-03 4 views
1

그래서 내가 게으른로드 기능 모듈과 비교적 큰 응용 프로그램이, 그 모듈 내의 특정 데이터 구조 작업 구성 요소의 일련의, 예 :angular2 설정 서비스 속성은

/thing/123/profile /thing/123/subscriptions /thing/123/history

이러한 구성 요소는 URL에서 참조되는 데이터 ID (123)가 해당 데이터 구조를 thing 서비스에로드하도록 확인 보호를 사용합니다. 해결 가드는 형제 경로 탐색에서 데이터를 반복적으로 찾는 것을 피하기 위해이 서비스 데이터를 우선적으로 사용하며 구성 요소 (profile, subscriptions, history)는 서비스에서 thing을 단순히 사용하며 데이터가 있는지 확인하기 위해 해결 관리자의 노력을 알지 못합니다. 로드되었습니다. 데이터가 서비스에로드되면 resolve는이를 사용하고, 그렇지 않은 경우 경로 확인 중에 찾습니다.

은 훌륭하게 들립니다. 어딘가에 2.0.X 주위에있는 어딘가에서 해결 관리자는 경로 확인 중 데이터로 서비스를 업데이트하는 것을 중단했습니다.

개별 구성 요소 'OnInitActivatedRoute.data.forEach()을 사용하는 경우 해결 관리자가 실제로 데이터를로드 한 것을 볼 수 있으며이 시간에 서비스에 다시 매핑 할 수 있지만 피하려고합니다. 특히 대부분의 경우 (형제 탐색) 데이터가 이미 서비스에 설정되어 있으므로 각 하위 구성 요소에 대한 경로 데이터 검사가 다시 구현됩니다. 해결 가드는 자체 데이터 멤버를 설정하는 문제의 thing 서비스에서 관찰 할 수 있습니다. 관측 가능 객체가 실행될 때 서비스 내에서 값이 적절하게 설정됩니다. 그것은 적절하게 경로 데이터로 해석됩니다. 경로가로드 될 때까지이 데이터는 서비스에서 사라졌습니다. ...

이것은 전체 URL을로드 할 때만 문제가됩니다. 해결 방법으로 데이터를 새로 고쳐야하는 최종 경로에서 새로 고침 - 경로를 탐색하기 전에 서비스에있는 경우 괜찮습니다.

나중에 간단한 예제를 사용하여 plunkr을 조합 할 수 있습니다. 실제로 응용 프로그램에서 내려 놓을 시간이 없지만 누군가이 동작을 보았는지 또는 이것이 일어날 수있는 이유를 알고 있는지 궁금해졌습니다. (루트 확인을 위해 기본 앱에 주입 된 서비스의 범위 지정 문제가 있지만 경로가로드 된 후에는 기능 모듈에서 문제가 발생하는 경우) 예기치 않은 동작입니까?

tl; dr - 내 서비스가 경로 확인 중에 해당 속성을 올바르게 설정하지만 경로가 실제로로드되면 설정이 해제되는 이유는 무엇입니까? 이는 하나의 기능 모듈에만 국한되는 것이 아니라 내 전체 앱에서 일관성을 유지하면서 라우팅 매개 변수 분석을 서비스로 추상화하는 기능을 파괴하여 구성 요소가 조회를 모르는 채로 남겨 둡니다. 미리 감사드립니다!

+1

서비스를 제공하는 곳과 관련이 있습니까? 해결 된 경로 데이터가 처음으로 설정되면 어딘가에 다시 초기화 될 가능성이 있습니까? –

+1

@Fredrik - 좋은 생각입니다. 서비스 생성자를 추적하고 어떤 시점에서 다시 생성되는지 확인합니다. 이유는 모르겠지만 서비스 기능 모듈을 통해 한 번만 제공됩니다. – derelict

답변

1

나는 충분히 열심히 본다 고 생각하지 않는다. router @^3.2.0과 관련하여 알려진 문제로 인해 제공자가 두 번 인스턴스 화됩니다. 해결책은 고정 될 때까지 라우터를 일시적으로 다운 그레이드하는 것입니다.

@Fredrik Lundin에게 재창조 된 서비스를 제안 해 주신 덕분에이 서비스는 경로가 해결 된 후에 실제로 재 작성되었습니다.

https://github.com/angular/angular/issues/12869