2017-10-27 10 views
1

내 Angular 앱에는 사용자가 내부 데이터베이스를 검색하는 데 사용할 수있는 다단계 Reactive Form이 있습니다.Angular 4에서 FormGroup을 쿼리 매개 변수가있는 URL로 변환하는 방법은 무엇입니까?

사용자가 "검색"을 클릭하면 결과를 표시하기 위해 SearchResultsComponent으로 연결하려고합니다. 또한 폼 입력을 나타내는 쿼리 매개 변수를 브라우저의 경로에 포함시켜 사용자가 어딘가에 복사하여 쉽게 다시 사용할 수 있도록하고 싶습니다. 본질적으로 상상할 수있는 것처럼 https://carsuniverse.com/?make=Honda&model=Civic&year=2009을 방문하면 SearchResultsComponent이 활성화되어 검색을 수행하는 서비스를 호출하고이를 구성 요소에 반환하고 페이지에 표시합니다.

가장 좋은 방법은 무엇입니까?) 각도로 이것을 할 수 있습니까?

+1

음, 어떻게 다른 경로로 이동합니다 않습니다하지만, 여기에 쿼리가 중첩 객체를 찾을 수있는 방법의 예입니다? Router.navigate()를 사용하고 있습니까? [해당 메소드] (https://angular.io/api/router/Router#navigate)에 쿼리 매개 변수를 전달하는 방법은 무엇입니까? [NavigationExtras.queryParams] (https://angular.io/api/router/NavigationExtras#queryParams)를 사용하십시오. [이 필드의 유형] (https://angular.io/api/router/Params)은 무엇입니까? 키와 값을 포함하는 객체입니다. FormGroup의 가치는 무엇입니까? 컨트롤 이름이 키이고 그 값이 value 인 객체? –

+0

@JBNizet 내부에 중첩 된 객체가있을 수 있습니다. 그것이 그것들을 어떻게 다루는지는 불분명하다. 나는 그것을 시험해 봐야한다고 생각한다. – CodyBugstein

답변

1

이 시도 :

const params = new URLSearchParams(); 
const formValue = this.form.value; // this.form should be a FormGroup 

for (key in formValue) { 
    params.append(key, formValue[key]); 
} 

우리는 양식 값 개체를 잡아, 각각의 키에 대해 우리는 요청을 할 때 다음 Http 라이브러리에 건네 줄 수있는 URLSearchParams 객체에 값을 추가합니다.

양식이 깊이 중첩되어있는 경우이 문제에 대해 생각해보십시오. 당신이 중첩 형태가 검색어 매개 변수로 표시되도록하려면

UPDATE

, 당신은 약간 for 루프를 수정해야합니다.

{ 
    name: 'John', 
    favorites: { 
     food: 'Pizza', 
     candy: 'Jolly Ranchers' 
    } 
} 

위의 객체가 다음과 같이 표현 될 수있다 :

이 이
?name=John&favorites[food]=Pizza&favorites[candy]=Jolly+Ranc‌​hers 
+0

그것이 바로 내가 걱정하는 것이다. 양식 구조를 변경하면이 기능을 수정해야합니까? 나는 많은 난장판으로 이끄는 것을 볼 수 있었다. – CodyBugstein

+0

아니, 그렇게하지 않아도된다. 이 함수는 폼의 모든 키를 반복하므로 거기에있는 내용과 상관 없거나 수정하면 함수가 항상 작동합니다. 제가 말하고자하는 것은 여러분이 폼 그룹 안에 폼 그룹을 가지고 있다면, 그 안에 다른 객체들을 가진 객체를 값으로주는 것입니다. 그것이 평평한 대상을 그대로 허용하기 때문에 이것이 깨질 때입니다. – Lansana

+0

네, 그게 실제로 의미 한 것입니다. – CodyBugstein