【问题标题】:RouteParams on bootstrap of app?应用程序引导程序上的RouteParams?
【发布时间】:2016-01-03 19:30:52
【问题描述】:

我有一个简单的 Angular 2 应用程序种子。一个简单的引导程序;

bootstrap(App, [
    ROUTER_PROVIDERS,
    provide(LocationStrategy, {useClass: HashLocationStrategy})
]);

并且App设置了几条路线;

@RouteConfig([
    {path: '/', component: Home, as: 'Home'},
    {path: '/login', component: Login, as: 'Login'}
])

这里没什么特别的。我做的一件事是 OAuth2 登录,它从应用程序重定向,然后返回,所以我想做的是在加载时传递一个查询参数。类似http://localhost/#?token=123 根据我不断收到的错误,这是:How to utilise URLSearchParams in Angular 2 看来我不能只将RouteParams 注入我的 App 构造函数,因为它不是由路由器创建的。

那么如何在加载时获取查询参数?我真的需要让 App 创建一个空组件(AppRoot 或其他东西),其唯一目的是让它包含一个router-outlet,这样我就可以让它通过路由器吗?这似乎是很多不必要的开销.. 有人知道更好的方法吗?

【问题讨论】:

  • 您是否尝试将自定义实例添加到bootstrap(..., provide(RouteParams, asValue: new RouteParams(...))。如果没有尝试,我会假设RouteParams 是从路由器注入的(如果可用),否则来自bootstrap() 的注入(我自己还没有尝试过)。
  • 这可以提供一个实例,但它看不到参数,它是空的。我怀疑是因为参数实际上去了 Home 路线
  • 我假设你在传递的实例上设置了参数,你不这样做吗?
  • 我不确定我是否理解?我希望他们能从 window.location 解析?
  • 对不起,我误解了你的问题。这种方式行不通。

标签: angular typescript angular2-routing typescript1.7


【解决方案1】:

好吧,事实证明你不能这样做,所以我不得不作弊。我的引导程序现在加载 App,它只加载一个 Route;

@RouteConfig([
    {path: '/...', component: RootView, as: 'RootView', useAsDefault: true}
])
export class App {
    constructor() {}
}

然后RootView可以按预期注入RouteParams;

export class RootView {
    constructor(routeParams: RouteParams) {
    }
}

这对我来说仍然感觉非常不雅,如果有人有更好的方法,请发表评论!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-05
    • 2016-02-01
    • 1970-01-01
    • 2017-12-28
    • 2018-03-30
    • 1970-01-01
    相关资源
    最近更新 更多