2017-10-27 5 views
1

私のAngularアプリケーションでは、ユーザーが内部データベースを検索するために使用できる多機能リアクティブフォームがあります。Angular 4では、FormGroupをクエリパラメータを持つURLに変換するにはどうすればよいですか?

ユーザーが[検索]をクリックすると、SearchResultsComponentにルーティングして結果を表示します。また、フォーム入力を表すクエリパラメータをブラウザのルートに含めて、ユーザがどこかにコピーして簡単に再利用できるようにします。基本的に想像するように、https://carsuniverse.com/?make=Honda&model=Civic&year=2009にアクセスすると、SearchResultsComponentがアクティブになり、検索を実行してコンポーネントに戻り、ページに表示されます。

ベストは何ですか? )Angularでこれを行うには?

+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の価値は何ではないですか?コントロール名をキーとし、それらの値を値として持つオブジェクト? –

+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オブジェクトに値を追加します。

フォームが深くネストされている場合は、このことの影響を考えてください。あなたが深くネストされたフォームは、クエリのparamsで表現したい場合は

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

関連する問題