2016-11-01 36 views
5

Próbuję przechwycić parametr kwerendy przy użyciu Angular 2.0 i mam trudny czas. Mam url jak WięcActivatedRoute.queryParams jest niezdefiniowany

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

I chcę, aby móc uchwycić wartość id_token przed routingu chwyta i tracę parametru. Znalazłem ten GitHub Issue wątek

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

Ale ta używa przestarzałej metody, które już nie działa. Próbowałem następujące metody

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'])); 

Próbowałem te metody w konstruktorze jak ngOnInit() mojego komponentu, ale konsola zawsze pokazuje niezdefiniowany. Czy robię to w niewłaściwym miejscu. W ogóle nie mogę zmienić QS, ponieważ jest tworzony przez Azure AD.

Odpowiedz

2

Spróbuj wstrzykiwanie ActivatedRoute i uzyskać queryParam z route.snapshot.queryParams['name'] tak:

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

Ustawianie queryParams poprzez router.navigate działa tak:

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

Mam podobny problem. Próbowałem wszystkiego, co OP umieścił, jak również tego, co powiedziałeś. Nie wiem, czy OP ma taki sam problem jak ja, ale dostaję się do mojej trasy jako callback logowania, nie nawigując z innego miejsca w aplikacji. Mój adres URL to 'http: // myhost /? Code = 1234 #/auth/callback', a router szybko przekierowuje na adres' http: // myhost/#/auth/callback', zanim komponent zostanie utworzony. –

+1

@JonTinsman Czy rozwiązałeś to? Mam do czynienia z dokładnym problemem. – Dino

+0

@masterfan Musiałem usunąć nawigację hash. Powodem mojego problemu jest to, że serwer auth zbudował trasę, nie przyłączył się do 'code' na końcu, ale użył budowniczego, który umieścił hasz po parametrach zapytania. Pierwotny powód, dla którego główny programista używał nawigacji hashowej, wydawał się już niepotrzebny i działał, gdy zrobiliśmy 'http: // myhost/auth/callback? Code = 1234'. Byłem wtedy w stanie uzyskać dostęp do parametru zapytania przez' activateRoute. snapshot.queryParams ['code'] ' –