Angular4路由:ResolveStart事件永远不会结束



我有一个Angular 4应用程序,使用来自自定义<base href="/long/required/path/index.html">的哈希路由。这样做是因为需求规定这个url必须是项目的根。我正在尝试使用哈希路由来解决这个问题。

我看到的问题涉及到解析给定路线的数据。给定urllocalhost: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未触发,因为Observable未完成。所以,试着在下一次通话后完成Observable。应该发出丢失的事件。

在内部,Angular使用concatMap操作符,该操作符在通知观察者之前等待完成。

最新更新