【发布时间】:2019-01-14 20:17:47
【问题描述】:
我正在使用Angular 2+ (targeting Angular 5) version of UI Router,但如果有人有使用 Angular 1 版本的相同问题的资源,我会很高兴看到 - 但我知道 redirectTo 属性不是早期的原始功能UI Router 的版本。
我有一个父组件,它的模板有“标签”,每个标签都命名为<ui-view>s。
父组件模板:
<ui-view name="child1" *ngIf="isCurrentView()"></ui-view>
<ui-view name="child2" *ngIf="isCurrentView()"></ui-view>
...
这样,您可以看到父模板中除了这些“选项卡”之外什么都没有。所以我希望名为“child1”的ui-view 成为默认视图,并且我希望它从父视图一直处于活动状态,直到用户导航到不同的路线以打开另一个 ui 视图。
假设isCurrentView() 函数有效,并为应该可见的任何视图返回一个布尔值。一次应该只有一个视图可见。为了清楚起见,我包含此信息。
以这种方式设置状态。您注意到在 parentComponent 状态中有多个resolveFn。这些都调用 API 并且是异步的,在这些完成之前我们无法导航到任何“选项卡”。这种设置确保了这种情况。 child1 和 child2 组件都依赖于这些响应。
{
name: "parentComponent",
url: "/parent",
component: ParentComponent,
resolve: [
{
token: "apiDetail1",
deps: [MyAPIService],
resolveFn: (myAPIService) => { return myAPIService.getApiDetail1(); }
},
{
token: "apiDetail2",
deps: [MyAPIService],
resolveFn: (myAPIService) => { return myAPIService.getApiDetail2(); }
}
]
},
{
name: "parentComponent.child1",
url: "/child1",
views: {
child1: { component: Child1Component }
}
},
{
name: "parentComponent.child2",
url: "/child2",
views: {
child2: { component: Child2Component }
}
}
我想在所有解析功能完成后立即重新路由到名为 parentComponent.child1 的状态 - 否则将无法获得必要的数据。但我不知道该怎么做。
我知道 UI 路由器有一个“redirectTo”属性,然后我可以在我的目标状态中传递它,如下所示:
redirectTo: "parentComponent.child1"
但是,redirectTo 在路由激活开始时完成。我知道我可以传入一个异步服务并让重定向等待该异步服务完成——但我不确定如何使用实际上在同一路由中等待解析功能的服务。
我已经调用了一次这些 API,所以我不需要再次调用它们。我只想在重定向之前等待已经被调用的那两个。但是怎么做呢?
【问题讨论】:
标签: javascript angular routes angular-ui-router state