私はカスタム<base href="/long/required/path/index.html">
からのハッシュルーティングを使ってAngular 4アプリを持っています。これは、要件には、このURLがプロジェクトのルートでなければならないと記述されているために行われます。私はこれを解決するためにハッシュルーティングを使用しようとしています。Angular4 Routing:ResolveStartイベントが終了しない
私が見ている問題は、特定のルートのデータを解決することです。 URL localhost:8000/long/require/path/index.html#/project/1/document/55
とapp.routes.ts
export const ROUTES: Routes = [
{
path: 'project/:projectId/document/:documentId',
component: DocumentViewerComponent,
resolve: { document: DataResolver}
},
{ path: '**', component: NoContentComponent }
];
を考えると、ここでリゾルバが実行され、意図したとおりにデータを取得します。
@Injectable()
export class DataResolver implements Resolve<Document> {
constructor(
private docService: DocumentService,
) { }
public resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<Document> {
this.docService.getDocument(route.params.workspaceId,route.params.documentId)
.subscribe(d => {
console.log('Document received, waiting for components to load?', d);
this.docService.documentRecieved(d);
}
);
return this.docService.recievedDocument$;
}
}
documentService
@Injectable()
export class DocumentService {
private recievedDocumentSource = new Subject<Document>();
recievedDocument$ = this.recievedDocumentSource.asObservable();
documentRecieved(document: Document) {
this.recievedDocumentSource.next(document);
}
}
ここでの意図は、他のコンポーネントがrecievedDocument$
を購読し、新しいドキュメントの情報を得ることができるということです。これは現在Observable
を購読してこのドキュメントを入手しています。しかし、<router-outlet>
は私のメインコンポーネントをレンダリングせず、ActivatedRoute
のスナップショットを確認した後、ルータはResolveStart
ルータイベントを入力しますが、ResolveEnd
イベントには到着しません。
1)アプローチは鳴っていますか?これは理にかなっていますか?
2)私がこのResolveStart状態にぶら下がっている理由は何ですか?
免責事項:コードが簡略化されたので、私が観察が完了していないので、ResolveEndがtriggredされていない構文