Angular でクエリパラメータを使用すると、アプリケーション内の任意のルートにオプションのパラメータを渡すことができます。クエリパラメータは通常のルートパラメータとは異なり、1つのルートでのみ使用でき、オプションではありません(例: /product/:id
)。
この記事では、製品のリストを表示するアプリケーションの例を参照します。受信コンポーネントが読み取り、処理できるオプションのorder
およびprice-range
の値を提供します。提供された値は、製品リストの順序付けとフィルタリングに影響します。
Router.navigate
でクエリパラメータを使用するRouter.navigate
を使用してルートに移動する必要がある場合は、queryParams
でクエリパラメータを渡します。
この例では、人気順にリストされた製品に訪問者を割り当てる場合、次のようになります。
goProducts() {
this.router.navigate(['/products'], { queryParams: { order: 'popular' } });
}
これにより、URLは以下のようになります。
http://localhost:4200/products?order=popular
複数のクエリパラメータを指定することもできます。この例では、人気順にリストされた製品に訪問者を割当し、高価な価格帯でフィルタリングする場合は、次のようになります。
goProducts() {
this.router.navigate(['/products'], { queryParams: { order: 'popular', 'price-range': 'not-cheap' } });
}
これにより、URLは以下のようになります。
http://localhost:4200/products?order=popular&price-range=not-cheap
これで、queryParams
を使用してクエリパラメータを設定する方法を理解することができました。
queryParamsHandling
を使用したクエリパラメータの保持またはマージデフォルトでは、クエリパラメータは後続のナビゲーション操作で失われます。これを防ぐために、queryParamsHandling
を'preserve'
または'merge'
のいずれかに設定します。
この例では、クエリパラメータを保持したまま、クエリパラメータ { order: 'popular' }
を含むページから/users
ページに訪問者を割り当てる場合は、'preserve'
を使用します。
goUsers() {
this.router.navigate(['/users'], { queryParamsHandling: 'preserve' });
}
これにより、URLは以下のようになります。
http://localhost:4200/users?order=popular
この例では、クエリパラメータ { order: 'popular' }
を含むページから、/users
ページに訪問者を割り当て、クエリパラメータ { filter: 'new' }
を渡す場合は、'merge'
を使用します。
goUsers() {
this.router.navigate(['/users'], { queryParams: { filter: 'new' }, queryParamsHandling: 'merge' });
}
これにより、URLは以下のようになります。
http://localhost:4200/users?order=popular&filter=new
注: クエリパラメータの保持は、以前は preserveQueryParams
を true
に設定して行われていましたが、Angular 4+ では廃止されi queryParamsHandling
を使用して行われるようになりました。
これで、queryParamsHandling
を使用してクエリパラメータを保持およびマージする方法を理解することができました。
RouterLink
でクエリパラメータを使用するこの例では、代わりにRouterLink
ディレクティブを使用してルートに移動する場合は、次のようにqueryParams
を使用します。
<a [routerLink]="['/products']" [queryParams]="{ order: 'popular'}">
Products
</a>
この例では、後続のナビゲーションでクエリパラメータを 'preserve'
または 'merge'
する場合、次のように queryParamsHandling
を使用します。
<a [routerLink]="['/users']"
[queryParams]="{ filter: 'new' }"
queryParamsHandling="merge">
Users
</a>
これで、RouterLink
で queryParams
および queryParamsHandling
の使用方法を理解することができました。
オプションのクエリパラメータをルートに渡す方法を学習したので、作成されたルートでこれらの値にアクセスする方法を見てみましょう。ActivatedRoute
クラスには、queryParams
プロパティがあり、現在の URL で使用可能なクエリパラメータのオブザーバブルな値を返します。
次のルートURL を指定します。
http://localhost:4200/products?order=popular
以下のように、order
クエリパラメータにアクセスできます。
// ...
import { ActivatedRoute } from '@angular/router';
import 'rxjs/add/operator/filter';
@Component({ ... })
export class ProductComponent implements OnInit {
order: string;
constructor(private route: ActivatedRoute) { }
ngOnInit() {
this.route.queryParams
.filter(params => params.order)
.subscribe(params => {
console.log(params); // { order: "popular" }
this.order = params.order;
console.log(this.order); // popular
}
);
}
}
コンソールログでは、次のように params
オブジェクトが表示されます。
Output{ order: "popular" }
params.order
の値は次のとおりです。
Outputpopular
また、queryParamMap
もあり、これは paramMap
オブジェクトを使用してオブザーバブルな値を返します。
次のルートURL を指定します。
http://localhost:4200/products?order=popular&filter=new
次のように、クエリパラメータにアクセスできます。
this.route.queryParamMap
.subscribe((params) => {
this.orderObj = { ...params.keys, ...params };
}
);
ここではオブジェクトスプレッド演算子を使用して、これはorderObj
のデータの結果の状態を示します。
{
"0": "order",
"1": "filter",
"params": {
"order": "popular",
"filter": "new"
}
}
これで、queryParams
および queryParamMap
を使用して作成されたルートの値にアクセスする方法を理解することができました。
この記事では、さまざまな例を使用して、Angular でクエリパラメータを設定および取得しました。Router.navigate
と RouterLink
を使用して、queryParams
と queryParamsHandling
を紹介しました。ActivatedRoute
を使用した queryParams
と queryParamMap
についても説明しました。
Angular の詳細については、Angular トピックページで演習とプログラミングプロジェクトをご覧ください。
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!