angular 5.0.3을 사용하고 /app?param1=hallo¶m2=123
있습니다. 와 같은 쿼리 매개 변수를 사용하여 응용 프로그램을 시작하고 싶습니다 . Angular 2의 URL에서 쿼리 매개 변수를 얻는 방법에 나와있는 모든 팁은 무엇입니까? 나를 위해 작동하지 않습니다.
쿼리 매개 변수가 작동하는 방법에 대한 아이디어가 있습니까?
private getQueryParameter(key: string): string {
const parameters = new URLSearchParams(window.location.search);
return parameters.get(key);
}
이 개인 함수는 매개 변수를 얻는 데 도움이되지만 새로운 Angular 환경에서 올바른 방법이라고 생각하지 않습니다.
[업데이트 :] 내 주요 앱은
@Component({...})
export class AppComponent implements OnInit {
constructor(private route: ActivatedRoute) {}
ngOnInit(): void {
// would like to get query parameters here...
// this.route...
}
}
답변
Angular 5에서을 구독하면 쿼리 매개 변수에 액세스 할 수 있습니다 this.route.queryParams
.
예: /app?param1=hallo¶m2=123
param1: string;
param2: string;
constructor(private route: ActivatedRoute) {
console.log('Called Constructor');
this.route.queryParams.subscribe(params => {
this.param1 = params['param1'];
this.param2 = params['param2'];
});
}
반면 경로 변수는 this.route.snapshot.params
예: /param1/:param1/param2/:param2
param1: string;
param2: string;
constructor(private route: ActivatedRoute) {
this.param1 = this.route.snapshot.params.param1;
this.param2 = this.route.snapshot.params.param2;
}
답변
이것은 나를 위해 가장 깨끗한 솔루션입니다
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
export class MyComponent {
constructor(
private route: ActivatedRoute
) {}
ngOnInit() {
const firstParam: string = this.route.snapshot.queryParamMap.get('firstParamKey');
const secondParam: string = this.route.snapshot.queryParamMap.get('secondParamKey');
}
}
답변
OP가 Angular 5 솔루션을 요청했지만 새로운 (6+) Angular 버전에 대해이 질문을 우연히 발견 한 모든 사용자에게 OP가 있음을 알고 있습니다. ActivatedRoute.queryParams (대부분의 다른 답변은 기반)에 관한 문서 인용 :
두 가지 이전 속성을 계속 사용할 수 있습니다. 대체 제품보다 성능 이 떨어지고, 권장하지 않으며 , 향후 Angular 버전에서 더 이상 사용되지 않을 수 있습니다 .
params — 경로와 관련된 필수 및 선택적 매개 변수가 포함 된 Observable입니다. 대신 paramMap을 사용하십시오.
queryParams — 모든 경로에 사용 가능한 쿼리 매개 변수가 포함 된 Observable입니다. 대신 queryParamMap을 사용하십시오.
Docs 에 따르면 쿼리 매개 변수를 얻는 간단한 방법은 다음과 같습니다.
constructor(private route: ActivatedRoute) { }
ngOnInit() {
this.param1 = this.route.snapshot.paramMap.get('param1');
this.param2 = this.route.snapshot.paramMap.get('param2');
}
고급 구성 요소 (예 : 고급 구성 요소 재사용)는 이 문서 장을 참조하십시오 .
편집하다:
아래 의견에서 올바르게 언급 했듯이이 답변은 적어도 OP에서 지정한 경우에는 잘못되었습니다.
OP는 전역 쿼리 매개 변수 (/ app? param1 = hallo & param2 = 123)를 요청합니다. 이 경우 queryParamMap을 사용해야합니다 (@ dapperdan1985 답변과 동일).
반면에 paramMap은 경로에 특정한 매개 변수에 사용됩니다 (예 : / app / : param1 / : param2, 결과적으로 / app / hallo / 123).
@JasonRoyle과 @daka에게 감사의 말을 전합니다.
답변
다음 과 같은 HttpParams를 사용할 수도 있습니다 .
getParamValueQueryString( paramName ) {
const url = window.location.href;
let paramValue;
if (url.includes('?')) {
const httpParams = new HttpParams({ fromString: url.split('?')[1] });
paramValue = httpParams.get(paramName);
}
return paramValue;
}
답변
import { ParamMap, Router, ActivatedRoute } from '@angular/router';
constructor(private route: ActivatedRoute) {}
ngOnInit() {
console.log(this.route.snapshot.queryParamMap);
}
최신 정보
import { Router, RouterStateSnapshot } from '@angular/router';
export class LoginComponent {
constructor(private router: Router) {
const snapshot: RouterStateSnapshot = router.routerState.snapshot;
console.log(snapshot); // <-- hope it helps
}
}
답변
나를위한 작업 :
constructor(private route: ActivatedRoute) {}
ngOnInit()
{
this.route.queryParams.subscribe(map => map);
this.route.snapshot.queryParams;
}
더 많은 옵션을 볼 angular2에 URL에서 어떻게 GET 쿼리 PARAMS를?
답변
쿼리 및 경로 매개 변수 (Angular 8)
https://myapp.com/user/666/read?age=23 같은 URL의 경우
import { combineLatest } from 'rxjs';
// ...
combineLatest( [this.route.paramMap, this.route.queryParamMap] )
.subscribe( ([pathParams, queryParams]) => {
let userId = pathParams.get('userId'); // =666
let age = queryParams.get('age'); // =23
// ...
})
최신 정보
사용 this.router.navigate([someUrl]);
하고 쿼리 매개 변수가 someUrl
문자열에 포함 된 경우 각도 인코딩은 URL을 인코딩하고 다음과 같은 것을 얻습니다 https://myapp.com/user/666/read%3Fage%323- 위의 솔루션은 잘못된 결과를 제공합니다 queryParams는 비어 있으며 경로 매개 변수는 경로 끝에있는 경우 마지막 경로 매개 변수에 붙일 수 있습니다). 이 경우 탐색의 방법을 변경 이에
this.router.navigateByUrl(someUrl);