2016-11-01 157 views
5

我想捕获使用Angular 2.0的查询字符串参数,并且很难。我有像这样ActivatedRoute.queryParams is undefined

http://localhost:5000/?id_token=eyJ0eXAiO ....

一个URL,我希望能够捕捉到的id_token前路由扎根的价值,我失去了参数。我发现这个问题GitHub的主题

https://github.com/angular/angular/issues/9451

但这使用不再工作的方法已过时。我曾尝试以下方法

var foo = this.activatedRoute.queryParams.subscribe(params => { 
     console.log(params); 
     let id = params['id_token']; 
     console.log(id); 
    }); 


    console.log(this.router.routerState.snapshot.root.queryParams["id_token"]); 

    var bar = this.activatedRoute.params.subscribe(
     (param: any) => console.log(param['id_token'])); 

我试图在构造这些方法以及我的组件的ngOnInit(),但控制台总是显示未定义。我是否在错误的地方做这件事。我无法改变QS,因为它是由Azure AD创建的。

回答

2

尝试注入ActivatedRoute与route.snapshot.queryParams['name']这样得到queryParam:

class SomeComponent implements OnInit { 
    constructor(private route: ActivatedRoute) { } 
    ngOnInit(): void { 
     let value = this.route.snapshot.queryParams['name']; 
    } 
} 

通过router.navigate设置queryParams是这样的:

class SomeComponent { 
    constructor(private router: Router) { } 
    goSomewhere(): void { 
     this.router.navigate(['somewhere'], { queryParams: { name: 'value' } }); 
    } 
} 
+0

我有一个类似的问题。我已经尝试了OP提供的所有内容以及您所陈述的内容。我不知道OP是否与我有同样的问题,但我正在以我的路线作为登录回调,而不是从应用程序中的其他地方导航。 我的网址是'http:// myhost /?code = 1234#/ auth/callback',在组件实例化之前,路由器很快重新路由到'http:// myhost /#/ auth/callback'。 –

+1

@JonTinsman你解决了这个问题吗?我面临的确切问题 – Dino

+0

@masterfan我不得不删除哈希导航。我的问题的原因是auth服务器构建重新路由时,它并没有将“代码”放在最后,而是使用了一个将散列放在查询参数后面的构建器。主开发人员使用哈希导航的原因似乎不再需要,只要我们做了'http:// myhost/auth/callback?code = 1234',我就可以通过activateRoute访问查询参数。 snapshot.queryParams [ '代码']' –