在UI-Router的RootModule.otherwise
中,如果用户打开应用程序无法识别的URL,我们可以指定重定向用户的位置。我一直在使用简单格式,只是一个指定目标状态名称的字符串:
@NgModule({
imports: [UIRouterModule.forRoot({
states: [
{
name: "home",
url: "/home",
component: HomeComponent
}
],
otherwise: "/home"
})],
exports: [UIRouterModule],
providers: []
})
export class AppRoutingModule { }
但现在我需要通过调用服务来获取数据,以确定我应该重定向用户的目标状态。我尝试了otherwise
的函数格式,希望能够通过注入器访问我的服务:
otherwise: (matchValue, url: UrlParts, router: UIRouter) => {
// this didn't work, router.globals.transition is not available
const userPrefSvc = router.globals.transition.injector().get(UserPreferenceService);
}
但它没有用,我无法找到一种方法来控制注射器。
是否可以从otherwise
功能访问服务?
答案 0 :(得分:1)
这个答案实际上来自Christopher Thielen。
设置otherwise
功能也可以在配置功能中完成,我们可以访问注入器:
@NgModule({
imports: [UIRouterModule.forRoot({
states: [
{
name: "home",
url: "/home",
component: HomeComponent
}
],
config: (uiRouter: UIRouter, injector: Injector, statesModule: StatesModule) => {
let userPrefSvc = injector.get(UserPreferenceService);
uiRouter.urlService.rules.otherwise((matchValue, url, router) => {
// ...
router.stateService.go("home");
// or
return "/home";
});
}
})],
exports: [UIRouterModule],
providers: []
})
export class AppRoutingModule { }