我有一个使用自定义<base href="/long/required/path/index.html">
哈希路由的Angular 4应用程序。这是因为需求声明这个URL必须是项目的根。我正在尝试使用散列路由来解决这个问题。Angular4路由:ResolveStart事件永不结束
我看到的问题涉及解析给定路线的数据。由于使用网址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状态?
免责声明:代码已经被简化了,所以我在寻找概念的缺陷超过句法