【问题标题】:Angular2 RC5 - route after finish loading config fileAngular2 RC5 - 完成加载配置文件后的路由
【发布时间】:2017-01-01 10:57:03
【问题描述】:

我正在使用 RC5 编写 Angular2 应用程序。

当 AppComponent 加载时,我希望应用程序使用 http 请求配置文件,并且一旦加载,我希望应用程序导航到指定的路由?

我怎样才能做到这一点?

每条路线都有 'canActivate' 属性,但如果我想在每次用户导航到新路线时做一些事情,我会发现它与它有更多关系。主要用于身份验证目的,您只希望通过身份验证保护少数路由,但在我的情况下,我想在 AppComponent 加载时加载配置。并非在每条路线激活或导航中。

希望我清楚自己想要达到的目标。

【问题讨论】:

标签: angular angular2-routing angular2-router3


【解决方案1】:

您可以在 canActivate 守卫中存储初始重新导航已完成,后续调用仅返回 true

您可以使用单个路由配置路由器

{ path: '**', InitComponent }

并在InitComponent 中加载您的配置,重新配置路由器(传递所有路由),然后转发到最初请求的路径。

另见Angular 2 Dynamic Route Building & Component Level Permissions

【讨论】:

  • 是的,我想到了。但是 RC5 中是否还有其他规定,即使在第一次加载应用程序时转到任何路线之前,它也会去获取配置。我的意思是解决那个服务调用...
  • 因为在这个解决方案中,每次我添加新路由时,我都必须在其中添加 canActivate ...它并不优雅
  • 我不确定你的意思。这是关于第一次加载带有深层链接的应用吗?
  • 我没有完全理解,但我会尝试你在这里的建议并让你知道......
  • 感谢您的回答。它似乎适用于您拥有一个应用程序模块的人,但当您的应用程序中的每个功能都有模块时,它就不起作用。因此,应用程序根目录的所有路由都重新路由到 init 组件,但是当用户尝试路由到具有自己模块的应用程序的另一个区域时,它会将用户带到那里而不路由到 init 组件。
【解决方案2】:

您应该创建一个执行请求的解析器​​,将解析器添加到路由并在组件的 onInit 中获取解析的配置数据。

组件.路由:

export const routes: Route[] = [
  { path: ':id', component: Component1, resolve: { data: Comp1Resolver }}
];

Comp1Resolver:

@Injectable()
export class Comp1Resolverimplements Resolve<Config> {
    constructor(private configService: ConfigService) { }

    resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<Config> {
        return this.configService.get(route.params['id']);
    }
}

组件1:

ngOnInit() {
let that = this;
 this.route.data.subscribe(data => {
 that.config= data['data'];

【讨论】:

  • 我明白你的意思。但即使在这种情况下,它也与路由相关联。我的要求是在收到服务响应并从服务器加载应用程序配置之前不要导航到任何路径。在上面的示例中,如果我路由到路径 hostname/:id 那么它将调用 Comp1Resolver 但是如果用户调用 hostname/about 或任何其他路由怎么办。所以我还必须使用相同的解析器配置所有路由。
  • 那你就可以按照甘特说的去做了。使用解析器创建一条路由并为 /about、/:id 等创建子路由。然后您的 url 将是主机名/父级/关于主机名/父级/id
猜你喜欢
  • 1970-01-01
  • 2017-01-07
  • 1970-01-01
  • 2016-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多