{"id":35853,"date":"2025-12-04T18:40:43","date_gmt":"2025-12-04T15:40:43","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=35853"},"modified":"2025-12-04T18:40:43","modified_gmt":"2025-12-04T15:40:43","slug":"angular-router-ile-query-parametrelerini-kullanma-rehberi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/angular-router-ile-query-parametrelerini-kullanma-rehberi\/","title":{"rendered":"Angular Router ile Query Parametrelerini Kullanma Rehberi"},"content":{"rendered":"<p><body><\/p>\n<h2>Angular Router ile Query Parametrelerini Kullanma Rehberi<\/h2>\n<p>Angular uygulamalar\u0131nda y\u00f6nlendirme, kullan\u0131c\u0131 deneyiminin temel ta\u015flar\u0131ndan biridir. Uygulama i\u00e7inde farkl\u0131 g\u00f6r\u00fcn\u00fcmler aras\u0131nda ge\u00e7i\u015f yapmam\u0131z\u0131 sa\u011flayan Angular Router, sadece statik URL yollar\u0131n\u0131 de\u011fil, ayn\u0131 zamanda dinamik veri iletmek i\u00e7in de g\u00fc\u00e7l\u00fc mekanizmalar sunar. Bu mekanizmalardan biri de &#8220;query parametreleri&#8221;dir. Query parametreleri, bir URL&#8217;nin sonuna eklenen ve genellikle anahtar-de\u011fer \u00e7iftlerinden olu\u015fan veri par\u00e7ac\u0131klar\u0131d\u0131r. Kullan\u0131c\u0131lar\u0131n bir sayfadaki filtreleme, s\u0131ralama, sayfalama gibi etkile\u015fimlerini veya uygulaman\u0131n belirli bir durumunu URL \u00fczerinden payla\u015f\u0131labilir hale getirmek i\u00e7in vazge\u00e7ilmezdirler.<\/p>\n<p>Bu makalede, Angular Router ile query parametrelerinin ne oldu\u011funu, neden \u00f6nemli olduklar\u0131n\u0131, nas\u0131l okunup olu\u015fturulduklar\u0131n\u0131 ve y\u00f6netildiklerini ayr\u0131nt\u0131l\u0131 bir \u015fekilde inceleyece\u011fiz. Ayr\u0131ca, yayg\u0131n kullan\u0131m senaryolar\u0131n\u0131 ele alacak, kod \u00f6rnekleri sunacak ve en iyi pratikler hakk\u0131nda ipu\u00e7lar\u0131 verece\u011fiz.<\/p>\n<h3>Query Parametreleri Nedir ve Neden Kullan\u0131l\u0131r?<\/h3>\n<p>Query parametreleri, bir URL&#8217;nin sorgu dizgesi (query string) b\u00f6l\u00fcm\u00fcnde yer alan ve genellikle <code>?<\/code> karakterinden sonra ba\u015flayan anahtar-de\u011fer \u00e7iftleridir. \u00d6rne\u011fin, <code>https:\/\/example.com\/urunler?kategori=elektronik&sirala=fiyat-artana<\/code> URL&#8217;sinde <code>kategori=elektronik<\/code> ve <code>sirala=fiyat-artana<\/code> birer query parametresidir.<\/p>\n<p>Path parametrelerinden (\u00f6rn: <code>urunler\/:id<\/code>) farkl\u0131 olarak, query parametreleri bir kayna\u011f\u0131n belirli bir \u00f6rne\u011fini tan\u0131mlamak yerine, genellikle o kayna\u011f\u0131n bir alt k\u00fcmesini veya g\u00f6r\u00fcn\u00fcm\u00fcn\u00fc de\u011fi\u015ftirmek i\u00e7in kullan\u0131l\u0131r.<\/p>\n<h4>Query Parametrelerinin Kullan\u0131m Alanlar\u0131:<\/h4>\n<p>*   <strong>Filtreleme:<\/strong> Bir \u00fcr\u00fcn listesini kategoriye, fiyata veya markaya g\u00f6re filtrelemek. (\u00f6rn: <code>urunler?kategori=kitap<\/code>)<br \/>\n*   <strong>S\u0131ralama:<\/strong> Arama sonu\u00e7lar\u0131n\u0131 fiyata, tarihe veya pop\u00fclerli\u011fe g\u00f6re s\u0131ralamak. (\u00f6rn: <code>urunler?sirala=fiyat-azalana<\/code>)<br \/>\n*   <strong>Sayfalama (Pagination):<\/strong> B\u00fcy\u00fck veri k\u00fcmelerini sayfalara ay\u0131rmak ve belirli bir sayfaya gitmek. (\u00f6rn: <code>urunler?sayfa=2&limit=10<\/code>)<br \/>\n*   <strong>Arama:<\/strong> Kullan\u0131c\u0131n\u0131n girdi\u011fi arama terimini URL&#8217;de ta\u015f\u0131mak. (\u00f6rn: <code>urunler?arama=laptop<\/code>)<br \/>\n*   <strong>Durum Payla\u015f\u0131m\u0131:<\/strong> Bir uygulaman\u0131n belirli bir durumunu (\u00f6rn: a\u00e7\u0131k bir modal, se\u00e7ili bir sekme) URL \u00fczerinden payla\u015f\u0131labilir hale getirmek.<br \/>\n*   <strong>Analiz ve Takip:<\/strong> Pazarlama kampanyalar\u0131n\u0131 veya kullan\u0131c\u0131 davran\u0131\u015flar\u0131n\u0131 takip etmek i\u00e7in UTM parametreleri gibi \u00f6zel parametreler kullanmak.<\/p>\n<p>Query parametreleri, bir uygulaman\u0131n durumunu URL&#8217;ye yans\u0131tarak, kullan\u0131c\u0131lar\u0131n taray\u0131c\u0131lar\u0131n\u0131n geri\/ileri d\u00fc\u011fmelerini kullanmalar\u0131na olanak tan\u0131r, belirli bir durumu kolayca payla\u015fmalar\u0131n\u0131 sa\u011flar ve sayfa yenilemelerinde durumun kaybolmas\u0131n\u0131 engeller.<\/p>\n<h3>Angular Router ile Query Parametrelerini Okuma<\/h3>\n<p>Angular uygulamalar\u0131nda, aktif rotan\u0131n query parametrelerine eri\u015fmek i\u00e7in <code>ActivatedRoute<\/code> servisini kullan\u0131r\u0131z. Bu servis, mevcut rotan\u0131n URL&#8217;sini, parametrelerini ve di\u011fer verilerini i\u00e7eren bir dizi g\u00f6zlemlenebilir (Observable) ve anl\u0131k g\u00f6r\u00fcnt\u00fc (snapshot) \u00f6zelli\u011fi sunar.<\/p>\n<h4>ActivatedRoute Servisi ve Query Parametreleri<\/h4>\n<p><code>ActivatedRoute<\/code> servisini bir bile\u015fenin constructor&#8217;\u0131na enjekte ederek kullanmaya ba\u015flayabiliriz:<\/p>\n<pre><code class=\"language-typescript\">import { Component, OnInit } from '@angular\/core';\nimport { ActivatedRoute } from '@angular\/router';\n\n@Component({\n  selector: 'app-product-list',\n  templateUrl: '.\/product-list.component.html',\n  styleUrls: ['.\/product-list.component.css']\n})\nexport class ProductListComponent implements OnInit {\n  category: string | null = null;\n  sortBy: string | null = null;\n\n  constructor(private route: ActivatedRoute) { }\n\n  ngOnInit(): void {\n    \/\/ Query parametrelerini okuma\n  }\n}<\/code><\/pre>\n<p>Query parametrelerini okuman\u0131n iki ana yolu vard\u0131r: <code>snapshot<\/code> ve <code>queryParams<\/code> Observable&#8217;\u0131.<\/p>\n<h4>Snapshot ile Query Parametrelerini Okuma<\/h4>\n<p><code>ActivatedRoute.snapshot.queryParams<\/code> \u00f6zelli\u011fi, bile\u015fen y\u00fcklendi\u011finde mevcut query parametrelerinin anl\u0131k bir g\u00f6r\u00fcnt\u00fcs\u00fcn\u00fc sa\u011flar. Bu y\u00f6ntem, parametrelerin bile\u015fen y\u00fcklendikten sonra de\u011fi\u015fmeyece\u011fi durumlarda veya sadece ba\u015flang\u0131\u00e7 de\u011ferlerini almak istedi\u011finizde kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<pre><code class=\"language-typescript\">\/\/ ... ProductListComponent i\u00e7inde\n\nngOnInit(): void {\n  this.category = this.route.snapshot.queryParams['kategori'];\n  this.sortBy = this.route.snapshot.queryParams['sirala'];\n\n  console.log('Kategori (Snapshot):', this.category);\n  console.log('S\u0131ralama (Snapshot):', this.sortBy);\n}<\/code><\/pre>\n<p><strong>Dikkat:<\/strong> E\u011fer ayn\u0131 bile\u015fen i\u00e7inde (\u00f6rne\u011fin, bir \u00fcr\u00fcn listesi sayfas\u0131nda farkl\u0131 filtreler se\u00e7ildi\u011finde) query parametreleri de\u011fi\u015firse, <code>snapshot<\/code> yeni de\u011ferleri yans\u0131tmayacakt\u0131r. Bu gibi dinamik senaryolar i\u00e7in <code>queryParams<\/code> Observable&#8217;\u0131n\u0131 kullanmak gerekir.<\/p>\n<h4>queryParams Observable ile Query Parametrelerini Okuma<\/h4>\n<p><code>ActivatedRoute.queryParams<\/code> bir Observable&#8217;d\u0131r ve query parametrelerinde herhangi bir de\u011fi\u015fiklik oldu\u011funda yeni de\u011ferleri yayar. Bu, ayn\u0131 bile\u015fen i\u00e7inde kal\u0131rken URL&#8217;deki query parametrelerinin de\u011fi\u015fti\u011fi senaryolar i\u00e7in idealdir. \u00d6rne\u011fin, bir arama sayfas\u0131nda farkl\u0131 aramalar yap\u0131ld\u0131\u011f\u0131nda veya filtreler de\u011fi\u015ftirildi\u011finde bile\u015fenin g\u00fcncel kalmas\u0131n\u0131 sa\u011flar.<\/p>\n<pre><code class=\"language-typescript\">import { Component, OnInit, OnDestroy } from '@angular\/core';\nimport { ActivatedRoute } from '@angular\/router';\nimport { Subscription } from 'rxjs';\n\n@Component({\n  selector: 'app-product-list',\n  templateUrl: '.\/product-list.component.html',\n  styleUrls: ['.\/product-list.component.css']\n})\nexport class ProductListComponent implements OnInit, OnDestroy {\n  category: string | null = null;\n  sortBy: string | null = null;\n  private queryParamsSubscription: Subscription | undefined;\n\n  constructor(private route: ActivatedRoute) { }\n\n  ngOnInit(): void {\n    this.queryParamsSubscription = this.route.queryParams.subscribe(params => {\n      this.category = params['kategori'] || 't\u00fcm\u00fc'; \/\/ Varsay\u0131lan de\u011fer atama\n      this.sortBy = params['sirala'] || 'varsay\u0131lan'; \/\/ Varsay\u0131lan de\u011fer atama\n      console.log('Kategori (Observable):', this.category);\n      console.log('S\u0131ralama (Observable):', this.sortBy);\n      \/\/ Parametreler de\u011fi\u015fti\u011finde verileri yeniden y\u00fckleme veya filtreleme i\u015flemleri burada yap\u0131labilir.\n      this.loadProducts();\n    });\n  }\n\n  loadProducts(): void {\n    console.log(<code>\u00dcr\u00fcnler y\u00fckleniyor: Kategori=${this.category}, S\u0131ralama=${this.sortBy}<\/code>);\n    \/\/ API \u00e7a\u011fr\u0131s\u0131 veya filtreleme mant\u0131\u011f\u0131 burada yer alacakt\u0131r.\n  }\n\n  ngOnDestroy(): void {\n    \/\/ Bellek s\u0131z\u0131nt\u0131lar\u0131n\u0131 \u00f6nlemek i\u00e7in aboneli\u011fi iptal etmeyi unutmay\u0131n.\n    if (this.queryParamsSubscription) {\n      this.queryParamsSubscription.unsubscribe();\n    }\n  }\n}<\/code><\/pre>\n<p>Bu \u00f6rnekte, <code>ngOnInit<\/code> i\u00e7inde <code>queryParams<\/code> Observable&#8217;\u0131na abone oluyoruz. Her parametre de\u011fi\u015fikli\u011finde aboneli\u011fin i\u00e7indeki kod \u00e7al\u0131\u015facak ve bile\u015fenimizin durumu g\u00fcncellenecektir. <code>ngOnDestroy<\/code> ya\u015fam d\u00f6ng\u00fcs\u00fc kancas\u0131nda aboneli\u011fi iptal etmek, bellek s\u0131z\u0131nt\u0131lar\u0131n\u0131 \u00f6nlemek i\u00e7in kritik \u00f6neme sahiptir.<\/p>\n<h3>Angular Router ile Query Parametrelerini Y\u00f6nlendirme<\/h3>\n<p>Query parametrelerini okumak kadar, onlar\u0131 olu\u015fturup URL&#8217;ye eklemek de \u00f6nemlidir. Angular Router, bu i\u015flemi hem deklaratif (template i\u00e7inde <code>routerLink<\/code> ile) hem de programatik (TypeScript kodunda <code>Router<\/code> servisi ile) olarak kolayla\u015ft\u0131r\u0131r.<\/p>\n<h4>routerLink Direktifi ile Query Parametreleri Ekleme<\/h4>\n<p><code>routerLink<\/code> direktifi, HTML \u015fablonlar\u0131nda navigasyon ba\u011flant\u0131lar\u0131 olu\u015fturmak i\u00e7in kullan\u0131l\u0131r. Query parametrelerini eklemek i\u00e7in <code>[queryParams]<\/code> input&#8217;unu kullan\u0131r\u0131z. Bu input, anahtar-de\u011fer \u00e7iftlerini i\u00e7eren bir JavaScript nesnesi al\u0131r.<\/p>\n<pre><code class=\"language-html\"><!-- app-product-list.component.html -->\n<div>\n  <h3>\u00dcr\u00fcn Kategorileri<\/h3>\n  <ul>\n    <li>\n      <a [routerLink]=\"['\/urunler']\" [queryParams]=\"{ kategori: 'elektronik' }\">Elektronik<\/a>\n    <\/li>\n    <li>\n      <a [routerLink]=\"['\/urunler']\" [queryParams]=\"{ kategori: 'kitap' }\">Kitaplar<\/a>\n    <\/li>\n    <li>\n      <a [routerLink]=\"['\/urunler']\" [queryParams]=\"{ kategori: 'giyim', sirala: 'fiyat-azalana' }\">Giyim (Pahal\u0131dan Ucuza)<\/a>\n    <\/li>\n    <li>\n      <a [routerLink]=\"['\/urunler']\">T\u00fcm \u00dcr\u00fcnler (Filtreyi Kald\u0131r)<\/a>\n    <\/li>\n  <\/ul>\n\n  <p>\u015eu anki Kategori: {{ category }}<\/p>\n  <p>\u015eu anki S\u0131ralama: {{ sortBy }}<\/p>\n<\/div><\/code><\/pre>\n<p>Bu \u00f6rnekte, farkl\u0131 kategorilere ve s\u0131ralama se\u00e7eneklerine sahip ba\u011flant\u0131lar olu\u015fturduk. Her ba\u011flant\u0131ya t\u0131kland\u0131\u011f\u0131nda, <code>\/urunler<\/code> rotas\u0131na ilgili query parametreleri eklenerek navigasyon ger\u00e7ekle\u015ftirilir.<\/p>\n<h4>queryParamsHandling ile Query Parametrelerini Y\u00f6netme<\/h4>\n<p><code>routerLink<\/code> veya <code>router.navigate()<\/code> ile query parametreleri eklerken, mevcut query parametrelerinin nas\u0131l ele al\u0131naca\u011f\u0131n\u0131 belirlemek i\u00e7in <code>queryParamsHandling<\/code> \u00f6zelli\u011fini kullanabiliriz. Bu \u00f6zellik \u00fc\u00e7 farkl\u0131 de\u011fere sahiptir:<\/p>\n<p>*   <strong><code>'merge'<\/code>:<\/strong> Yeni query parametrelerini mevcut olanlarla birle\u015ftirir. Ayn\u0131 anahtara sahip parametreler varsa, yenisi eskisinin \u00fczerine yazar. Bu, en yayg\u0131n ve genellikle istenen davran\u0131\u015ft\u0131r.<br \/>\n*   <strong><code>'preserve'<\/code>:<\/strong> Mevcut query parametrelerini aynen korur ve yeni eklenen parametreleri g\u00f6z ard\u0131 eder. Yeni bir query parametresi eklemek yerine, sadece rotan\u0131n path&#8217;ini de\u011fi\u015ftirmek istedi\u011finizde kullan\u0131\u015fl\u0131d\u0131r.<br \/>\n*   <strong><code>undefined<\/code> veya <code>null<\/code> (varsay\u0131lan):<\/strong> Mevcut query parametrelerini tamamen kald\u0131r\u0131r ve sadece yeni belirtilen parametreleri kullan\u0131r. E\u011fer <code>queryParams<\/code> belirtilmemi\u015fse, URL&#8217;deki t\u00fcm query parametreleri silinir.<\/p>\n<p><strong>\u00d6rnekler:<\/strong><\/p>\n<pre><code class=\"language-html\"><!-- Mevcut query parametrelerini koruyarak yenilerini ekle\/g\u00fcncelle -->\n<!-- \u00d6rn: URL \/urunler?kategori=elektronik iken, buna t\u0131klay\u0131nca \/urunler?kategori=elektronik&sirala=fiyat-azalana olur -->\n<a [routerLink]=\"['\/urunler']\" [queryParams]=\"{ sirala: 'fiyat-azalana' }\" queryParamsHandling=\"merge\">Fiyata G\u00f6re S\u0131rala<\/a>\n\n<!-- Mevcut query parametrelerini aynen koru -->\n<!-- \u00d6rn: URL \/urunler?kategori=elektronik iken, buna t\u0131klay\u0131nca \/urunler?kategori=elektronik olarak kal\u0131r, sirala eklenmez -->\n<a [routerLink]=\"['\/urunler']\" [queryParams]=\"{ sirala: 'fiyat-azalana' }\" queryParamsHandling=\"preserve\">Sadece Rota De\u011fi\u015ftir<\/a>\n\n<!-- Mevcut query parametrelerini temizle (varsay\u0131lan davran\u0131\u015f) -->\n<!-- \u00d6rn: URL \/urunler?kategori=elektronik iken, buna t\u0131klay\u0131nca \/urunler olur -->\n<a [routerLink]=\"['\/urunler']\">T\u00fcm Filtreleri Temizle<\/a>\n\n<!-- Yeni parametre eklerken mevcutlar\u0131 temizle -->\n<!-- \u00d6rn: URL \/urunler?kategori=elektronik iken, buna t\u0131klay\u0131nca \/urunler?sayfa=1 olur -->\n<a [routerLink]=\"['\/urunler']\" [queryParams]=\"{ sayfa: 1 }\">Sayfa 1'e Git<\/a><\/code><\/pre>\n<p><code>'merge'<\/code> genellikle filtreleme, s\u0131ralama ve sayfalama gibi i\u015flemlerde en kullan\u0131\u015fl\u0131 olan\u0131d\u0131r, \u00e7\u00fcnk\u00fc kullan\u0131c\u0131n\u0131n mevcut durumunu korurken yeni bir parametre eklemesine veya de\u011fi\u015ftirmesine olanak tan\u0131r.<\/p>\n<h4>Programatik Navigasyon ile Query Parametreleri Ekleme<\/h4>\n<p>Bazen bir butona t\u0131kland\u0131\u011f\u0131nda, bir form g\u00f6nderildi\u011finde veya bir servisten veri geldi\u011finde programatik olarak navigasyon yapmak gerekebilir. Bu durumlarda <code>Router<\/code> servisini kullan\u0131r\u0131z.<\/p>\n<pre><code class=\"language-typescript\">import { Component } from '@angular\/core';\nimport { Router, ActivatedRoute } from '@angular\/router';\n\n@Component({\n  selector: 'app-search-bar',\n  template: <code>\n    <input type=\"text\" [(ngModel)]=\"searchTerm\" placeholder=\"\u00dcr\u00fcn ara...\">\n    <button (click)=\"search()\">Ara<\/button>\n    <button (click)=\"clearFilters()\">Filtreleri Temizle<\/button>\n  <\/code>\n})\nexport class SearchBarComponent {\n  searchTerm: string = '';\n\n  constructor(private router: Router, private route: ActivatedRoute) { }\n\n  search(): void {\n    this.router.navigate(\n      ['\/urunler'],\n      {\n        queryParams: { arama: this.searchTerm },\n        queryParamsHandling: 'merge' \/\/ Mevcut parametreleri koruyarak arama terimini ekle\n      }\n    );\n  }\n\n  clearFilters(): void {\n    this.router.navigate(\n      ['\/urunler'],\n      {\n        queryParams: {}, \/\/ T\u00fcm query parametrelerini temizle\n        queryParamsHandling: '' \/\/ Varsay\u0131lan davran\u0131\u015f (queryParamsHandling: 'merge' ile ayn\u0131 de\u011fil, mevcutlar\u0131 s\u0131f\u0131rlar)\n      }\n    );\n    \/\/ Alternatif olarak, queryParams: null da kullan\u0131labilir, bu da t\u00fcm parametreleri siler.\n    \/\/ this.router.navigate(['\/urunler'], { queryParams: null });\n  }\n\n  \/\/ Sayfalama \u00f6rne\u011fi\n  goToPage(pageNumber: number): void {\n    this.router.navigate(\n      [], \/\/ Mevcut rotada kalmak i\u00e7in bo\u015f dizi\n      {\n        relativeTo: this.route, \/\/ Mevcut rotaya g\u00f6re navigasyon yap\n        queryParams: { sayfa: pageNumber },\n        queryParamsHandling: 'merge' \/\/ Mevcut parametreleri koruyarak sayfa numaras\u0131n\u0131 g\u00fcncelle\n      }\n    );\n  }\n}<\/code><\/pre>\n<p><code>router.navigate()<\/code> metodunun ikinci arg\u00fcman\u0131 bir navigasyon konfig\u00fcrasyon nesnesidir. Bu nesne i\u00e7inde <code>queryParams<\/code> ile parametreleri ve <code>queryParamsHandling<\/code> ile davran\u0131\u015f\u0131n\u0131 belirtebiliriz. <code>relativeTo: this.route<\/code> kullan\u0131m\u0131, mevcut rotan\u0131n URL&#8217;sini temel alarak navigasyon yapmay\u0131 sa\u011flar, bu da \u00f6zellikle ayn\u0131 bile\u015fen i\u00e7inde kal\u0131rken sadece query parametrelerini de\u011fi\u015ftirmek istedi\u011fimizde kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<h3>Query Parametrelerini Y\u00f6netme ve G\u00fcncelleme<\/h3>\n<p>Uygulama geli\u015ftik\u00e7e, query parametrelerini dinamik olarak eklemek, g\u00fcncellemek veya kald\u0131rmak gerekebilir. Bu, kullan\u0131c\u0131 etkile\u015fimlerine veya uygulaman\u0131n i\u00e7 mant\u0131\u011f\u0131na ba\u011fl\u0131 olarak de\u011fi\u015febilir.<\/p>\n<h4>Parametre Ekleme veya G\u00fcncelleme<\/h4>\n<p><code>queryParamsHandling: 'merge'<\/code> kullanmak, mevcut parametreleri koruyarak yeni parametreler eklemenin veya var olanlar\u0131 g\u00fcncellemenin en yayg\u0131n yoludur.<\/p>\n<pre><code class=\"language-typescript\">\/\/ Bir filtre ekleme veya mevcut bir filtreyi g\u00fcncelleme\nupdateFilter(filterName: string, filterValue: string): void {\n  this.router.navigate(\n    [], \/\/ Mevcut rotada kal\n    {\n      relativeTo: this.route,\n      queryParams: { [filterName]: filterValue },\n      queryParamsHandling: 'merge' \/\/ Mevcut parametrelerle birle\u015ftir\n    }\n  );\n}\n\n\/\/ Birden fazla parametreyi ayn\u0131 anda g\u00fcncelleme\napplyMultipleFilters(category: string, minPrice: number): void {\n  this.router.navigate(\n    [],\n    {\n      relativeTo: this.route,\n      queryParams: { kategori: category, minFiyat: minPrice },\n      queryParamsHandling: 'merge'\n    }\n  );\n}<\/code><\/pre>\n<h4>Parametre Silme<\/h4>\n<p>Bir query parametresini URL&#8217;den kald\u0131rmak i\u00e7in, o parametrenin de\u011ferini <code>undefined<\/code> veya <code>null<\/code> olarak ayarlayabilir ve yine <code>queryParamsHandling: 'merge'<\/code> kullanabiliriz. Router, <code>undefined<\/code> veya <code>null<\/code> de\u011fere sahip parametreleri URL&#8217;ye eklemeyecektir.<\/p>\n<pre><code class=\"language-typescript\">\/\/ Belirli bir filtreyi kald\u0131rma\nremoveFilter(filterName: string): void {\n  const currentQueryParams = { ...this.route.snapshot.queryParams }; \/\/ Mevcut parametreleri kopyala\n  delete currentQueryParams[filterName]; \/\/ Kald\u0131r\u0131lacak parametreyi sil\n\n  this.router.navigate(\n    [],\n    {\n      relativeTo: this.route,\n      queryParams: currentQueryParams, \/\/ G\u00fcncellenmi\u015f parametreleri g\u00f6nder\n      queryParamsHandling: 'merge' \/\/ Bu durumda asl\u0131nda 'merge' gerekli de\u011fil ama al\u0131\u015fkanl\u0131k olarak kullan\u0131labilir\n    }\n  );\n  \/\/ Daha basit bir yol:\n  \/\/ this.router.navigate(\n  \/\/   [],\n  \/\/   {\n  \/\/     relativeTo: this.route,\n  \/\/     queryParams: { [filterName]: null }, \/\/ Parametreyi null olarak ayarla\n  \/\/     queryParamsHandling: 'merge'\n  \/\/   }\n  \/\/ );\n}\n\n\/\/ T\u00fcm filtreleri temizleme\nclearAllFilters(): void {\n  this.router.navigate(\n    [],\n    {\n      relativeTo: this.route,\n      queryParams: null \/\/ T\u00fcm query parametrelerini kald\u0131r\n    }\n  );\n}<\/code><\/pre>\n<p><code>queryParams: null<\/code> kullanmak, mevcut rotadaki t\u00fcm query parametrelerini temizlemenin en do\u011frudan yoludur.<\/p>\n<h3>Geli\u015fmi\u015f Kullan\u0131m Senaryolar\u0131 ve \u0130pu\u00e7lar\u0131<\/h3>\n<p>Query parametrelerini etkin bir \u015fekilde kullanmak i\u00e7in baz\u0131 geli\u015fmi\u015f teknikler ve en iyi pratikler mevcuttur.<\/p>\n<h4>Type Safety (Tip G\u00fcvenli\u011fi) ile Query Parametreleri<\/h4>\n<p>Query parametreleri varsay\u0131lan olarak <code>string<\/code> t\u00fcr\u00fcndedir ve <code>ActivatedRoute.queryParams<\/code> bir <code>Params<\/code> (anahtar-de\u011fer \u00e7iftleri i\u00e7in) nesnesi d\u00f6nd\u00fcr\u00fcr. Bu, parametreleri okurken veya yazarken tip hatalar\u0131na yol a\u00e7abilir. Tip g\u00fcvenli\u011fini art\u0131rmak i\u00e7in bir interface tan\u0131mlayabiliriz:<\/p>\n<pre><code class=\"language-typescript\">\/\/ query-params.interface.ts\nexport interface ProductQueryParams {\n  kategori?: string;\n  sirala?: 'fiyat-artana' | 'fiyat-azalana' | 'yeni' | 'populer';\n  arama?: string;\n  sayfa?: number;\n  limit?: number;\n  [key: string]: any; \/\/ Di\u011fer dinamik parametreler i\u00e7in\n}\n\n\/\/ product-list.component.ts\nimport { ProductQueryParams } from '.\/query-params.interface';\n\n\/\/ ...\nexport class ProductListComponent implements OnInit, OnDestroy {\n  currentParams: ProductQueryParams = {};\n  \/\/ ...\n\n  ngOnInit(): void {\n    this.queryParamsSubscription = this.route.queryParams.subscribe((params: ProductQueryParams) => {\n      this.currentParams = params;\n      this.category = params.kategori || null;\n      this.sortBy = params.sirala || null;\n      \/\/ ...\n    });\n  }\n\n  updateCategory(category: string): void {\n    this.router.navigate([], {\n      relativeTo: this.route,\n      queryParams: { kategori: category } as ProductQueryParams, \/\/ Tip d\u00f6n\u00fc\u015f\u00fcm\u00fc\n      queryParamsHandling: 'merge'\n    });\n  }\n}<\/code><\/pre>\n<p>Bu yakla\u015f\u0131m, parametre adlar\u0131n\u0131n ve olas\u0131 de\u011ferlerinin tutarl\u0131 kalmas\u0131na yard\u0131mc\u0131 olur.<\/p>\n<h4>URL Temizli\u011fi ve Varsay\u0131lan De\u011ferler<\/h4>\n<p>Varsay\u0131lan de\u011ferlere sahip parametreleri URL&#8217;de g\u00f6stermek, URL&#8217;yi gereksiz yere uzatabilir ve okunabilirli\u011fini azaltabilir. \u00d6rne\u011fin, <code>sayfa=1<\/code> varsay\u0131lan sayfa numaras\u0131 ise, bunu URL&#8217;de g\u00f6stermek genellikle gereksizdir.<\/p>\n<p>Bir parametrenin de\u011feri varsay\u0131lan ise, onu URL&#8217;den kald\u0131rarak URL&#8217;yi temiz tutabiliriz:<\/p>\n<pre><code class=\"language-typescript\">\/\/ Programatik navigasyon s\u0131ras\u0131nda\nnavigateToProducts(category: string | null, page: number = 1): void {\n  const queryParams: ProductQueryParams = {};\n\n  if (category) {\n    queryParams.kategori = category;\n  }\n  if (page > 1) { \/\/ Sadece 1'den b\u00fcy\u00fck sayfa numaralar\u0131n\u0131 URL'ye ekle\n    queryParams.sayfa = page;\n  }\n\n  this.router.navigate(['\/urunler'], {\n    queryParams: queryParams,\n    queryParamsHandling: 'merge'\n  });\n}<\/code><\/pre>\n<p>Bu yakla\u015f\u0131m, sadece varsay\u0131lan olmayan veya anlaml\u0131 olan parametrelerin URL&#8217;de g\u00f6r\u00fcnmesini sa\u011flar.<\/p>\n<h4>SEO ve Payla\u015f\u0131labilirlik \u00dczerindeki Etkisi<\/h4>\n<p>Query parametreleri, bir sayfan\u0131n i\u00e7eri\u011fini veya g\u00f6r\u00fcn\u00fcm\u00fcn\u00fc de\u011fi\u015ftirdi\u011finde, SEO a\u00e7\u0131s\u0131ndan dikkatli olunmas\u0131 gerekir. Arama motorlar\u0131, farkl\u0131 query parametrelerine sahip URL&#8217;leri farkl\u0131 sayfalar olarak alg\u0131layabilir ve bu da yinelenen i\u00e7erik sorunlar\u0131na yol a\u00e7abilir.<\/p>\n<p>*   <strong>Canonical URL&#8217;ler:<\/strong> <code>rel=\"canonical\"<\/code> etiketini kullanarak arama motorlar\u0131na bir sayfan\u0131n &#8220;tercih edilen&#8221; veya &#8220;ana&#8221; URL&#8217;sini belirtebilirsiniz. Bu, \u00f6zellikle filtreleme ve s\u0131ralama gibi i\u015flemlerle \u00e7ok say\u0131da benzer URL olu\u015ftu\u011funda \u00f6nemlidir.<br \/>\n*   <strong>Anlaml\u0131 Parametreler:<\/strong> Parametre adlar\u0131n\u0131 ve de\u011ferlerini a\u00e7\u0131klay\u0131c\u0131 tutun (<code>kategori=kitap<\/code> yerine <code>cat=k<\/code> gibi k\u0131saltmalardan ka\u00e7\u0131n\u0131n).<br \/>\n*   <strong>Payla\u015f\u0131labilirlik:<\/strong> Query parametreleri sayesinde kullan\u0131c\u0131lar, belirli bir filtre veya arama sonucuna sahip bir sayfan\u0131n URL&#8217;sini kolayca payla\u015fabilirler. Bu, kullan\u0131c\u0131 deneyimi i\u00e7in b\u00fcy\u00fck bir art\u0131d\u0131r.<\/p>\n<h4>State Management ile Entegrasyon<\/h4>\n<p>B\u00fcy\u00fck \u00f6l\u00e7ekli Angular uygulamalar\u0131nda, global state y\u00f6netimi (NgRx, Akita, NGRX Component Store vb.) kullanmak yayg\u0131nd\u0131r. Query parametrelerini global state ile senkronize etmek, uygulaman\u0131n durumunu kal\u0131c\u0131 ve payla\u015f\u0131labilir hale getirmek i\u00e7in g\u00fc\u00e7l\u00fc bir y\u00f6ntemdir.<\/p>\n<p>*   <strong>URL -> State:<\/strong> <code>ActivatedRoute.queryParams<\/code> Observable&#8217;\u0131na abone olarak, URL&#8217;den gelen parametreleri state&#8217;e dispatch edebilirsiniz.<br \/>\n*   <strong>State -> URL:<\/strong> State&#8217;teki de\u011fi\u015fiklikleri dinleyerek, <code>Router<\/code> servisi arac\u0131l\u0131\u011f\u0131yla URL&#8217;deki query parametrelerini g\u00fcncelleyebilirsiniz.<\/p>\n<p>Bu iki y\u00f6nl\u00fc senkronizasyon, uygulaman\u0131n durumunun her zaman URL ile e\u015fle\u015fmesini sa\u011flar.<\/p>\n<h4>Hata Y\u00f6netimi ve Varsay\u0131lan De\u011ferler<\/h4>\n<p>Query parametreleri iste\u011fe ba\u011fl\u0131d\u0131r ve her zaman mevcut olmayabilir. Bu nedenle, bile\u015fenlerinizde parametreleri okurken <code>null<\/code> veya <code>undefined<\/code> durumlar\u0131n\u0131 ele almak \u00f6nemlidir. Yukar\u0131daki \u00f6rneklerde g\u00f6sterildi\u011fi gibi, <code>params['kategori'] || 't\u00fcm\u00fc'<\/code> gibi varsay\u0131lan de\u011fer atamalar\u0131 bu konuda yard\u0131mc\u0131 olur. Ayr\u0131ca, parametrelerin beklenen formatta (\u00f6rn. bir sayfa numaras\u0131n\u0131n say\u0131 olmas\u0131) olup olmad\u0131\u011f\u0131n\u0131 kontrol etmek i\u00e7in do\u011frulama yapmak da iyi bir pratiktir.<\/p>\n<pre><code class=\"language-typescript\">this.queryParamsSubscription = this.route.queryParams.subscribe(params => {\n  this.category = params['kategori'] || 't\u00fcm\u00fc';\n  const pageParam = parseInt(params['sayfa'] as string, 10); \/\/ String'i say\u0131ya d\u00f6n\u00fc\u015ft\u00fcr\n  this.page = !isNaN(pageParam) && pageParam > 0 ? pageParam : 1; \/\/ Ge\u00e7erli say\u0131 de\u011filse veya 0'dan k\u00fc\u00e7\u00fckse 1 yap\n  \/\/ ...\n});<\/code><\/pre>\n<h3>S\u0131k Yap\u0131lan Hatalar ve \u00c7\u00f6z\u00fcmleri<\/h3>\n<p>Angular Router ile query parametrelerini kullan\u0131rken kar\u015f\u0131la\u015f\u0131lan baz\u0131 yayg\u0131n hatalar ve bunlar\u0131n nas\u0131l \u00e7\u00f6z\u00fclece\u011fi:<\/p>\n<p>*   <strong><code>snapshot<\/code> yerine <code>queryParams<\/code> Observable kullanmama:<\/strong> Ayn\u0131 bile\u015fen i\u00e7inde query parametreleri de\u011fi\u015fti\u011finde bile\u015fenin g\u00fcncellenmemesi.<br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong> Dinamik olarak de\u011fi\u015fen parametreler i\u00e7in her zaman <code>ActivatedRoute.queryParams<\/code> Observable&#8217;\u0131na abone olun ve <code>ngOnDestroy<\/code> i\u00e7inde aboneli\u011fi iptal etmeyi unutmay\u0131n.<br \/>\n*   <strong><code>queryParamsHandling<\/code>&#8216;i yanl\u0131\u015f anlama:<\/strong> \u00d6zellikle <code>'merge'<\/code> ve varsay\u0131lan davran\u0131\u015f aras\u0131ndaki fark\u0131 kar\u0131\u015ft\u0131rmak. Varsay\u0131lan davran\u0131\u015f (<code>null<\/code> veya <code>undefined<\/code> olarak b\u0131rakmak), mevcut query parametrelerini temizler. <code>'merge'<\/code> ise mevcutlarla birle\u015ftirir.<br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong> Her navigasyon i\u015fleminde <code>queryParamsHandling<\/code>&#8216;in istenen davran\u0131\u015f\u0131 sa\u011flad\u0131\u011f\u0131ndan emin olun. Genellikle <code>merge<\/code> kullanmak istenir.<br \/>\n*   <strong>URL&#8217;de gereksiz parametre birikimi:<\/strong> Varsay\u0131lan de\u011ferdeki parametrelerin veya art\u0131k kullan\u0131lmayan parametrelerin URL&#8217;de kalmas\u0131.<br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong> Programatik navigasyon yaparken, yaln\u0131zca anlaml\u0131 ve varsay\u0131lan olmayan parametreleri <code>queryParams<\/code> nesnesine ekleyin. Parametreleri kald\u0131rmak i\u00e7in de\u011ferlerini <code>null<\/code> veya <code>undefined<\/code> olarak ayarlayabilir veya <code>queryParams: null<\/code> ile t\u00fcm\u00fcn\u00fc temizleyebilirsiniz.<br \/>\n*   <strong>Tip g\u00fcvenli\u011fi eksikli\u011fi:<\/strong> Query parametrelerinin her zaman string olarak gelmesi ve say\u0131sal veya boolean de\u011ferlere d\u00f6n\u00fc\u015ft\u00fcr\u00fcl\u00fcrken hata yap\u0131lmas\u0131.<br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong> Parametreleri okurken uygun tip d\u00f6n\u00fc\u015f\u00fcmlerini (<code>parseInt<\/code>, <code>parseFloat<\/code>, <code>JSON.parse<\/code>) uygulay\u0131n ve <code>isNaN<\/code> gibi kontrollerle ge\u00e7erlili\u011fini do\u011frulay\u0131n. Ayr\u0131ca, yukar\u0131da bahsedilen interface kullan\u0131m\u0131 ile tip g\u00fcvenli\u011fini art\u0131r\u0131n.<br \/>\n*   <strong>Abonelikleri iptal etmeyi unutma:<\/strong> <code>queryParams<\/code> Observable&#8217;\u0131na abone olundu\u011funda, bile\u015fen yok edildi\u011finde aboneli\u011fin iptal edilmemesi bellek s\u0131z\u0131nt\u0131lar\u0131na yol a\u00e7ar.<br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong> Her zaman <code>ngOnDestroy<\/code> ya\u015fam d\u00f6ng\u00fcs\u00fc kancas\u0131nda <code>subscription.unsubscribe()<\/code> metodunu \u00e7a\u011f\u0131rarak abonelikleri temizleyin. <code>takeUntil<\/code> operat\u00f6r\u00fcn\u00fc kullanmak da yayg\u0131n bir RxJS \u00e7\u00f6z\u00fcm\u00fcd\u00fcr.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Angular Router ile query parametrelerini kullanmak, dinamik ve kullan\u0131c\u0131 dostu web uygulamalar\u0131 olu\u015fturman\u0131n temel bir par\u00e7as\u0131d\u0131r. Filtreleme, s\u0131ralama, sayfalama ve uygulama durumu payla\u015f\u0131m\u0131 gibi bir\u00e7ok senaryoda vazge\u00e7ilmez bir ara\u00e7t\u0131r. <code>ActivatedRoute<\/code> servisi ile parametreleri okumak ve <code>Router<\/code> servisi veya <code>routerLink<\/code> direktifi ile parametreleri olu\u015fturup y\u00f6netmek, Angular&#8217;\u0131n g\u00fc\u00e7l\u00fc y\u00f6nlerinden biridir.<\/p>\n<p>Bu makalede ele ald\u0131\u011f\u0131m\u0131z konular ve kod \u00f6rnekleri sayesinde, Angular uygulamalar\u0131n\u0131zda query parametrelerini etkili bir \u015fekilde kullanmak i\u00e7in sa\u011flam bir temel olu\u015fturdu\u011funuzu umuyoruz. En iyi pratikleri (tip g\u00fcvenli\u011fi, URL temizli\u011fi, abonelik y\u00f6netimi) uygulayarak, hem geli\u015ftirici deneyiminizi iyile\u015ftirecek hem de son kullan\u0131c\u0131lar i\u00e7in daha sa\u011flam ve sezgisel uygulamalar sunacaks\u0131n\u0131z. Unutmay\u0131n, iyi tasarlanm\u0131\u015f URL&#8217;ler, uygulaman\u0131z\u0131n kullan\u0131labilirli\u011fini ve payla\u015f\u0131labilirli\u011fini \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131r\u0131r.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Angular Router ile Query Parametrelerini Kullanma Rehberi\nAngular uygulamalar\u0131nda y\u00f6nlendirme, kullan\u0131c\u0131 deneyiminin temel ta\u015flar\u0131ndan biridir.","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1488],"tags":[],"class_list":{"0":"post-35853","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-angular","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Angular Router ile Query Parametrelerini Kullanma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/angular-router-ile-query-parametrelerini-kullanma-rehberi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Angular Router ile Query Parametrelerini Kullanma Rehberi\" \/>\n<meta property=\"og:description\" content=\"Angular Router ile Query Parametrelerini Kullanma Rehberi Angular uygulamalar\u0131nda y\u00f6nlendirme, kullan\u0131c\u0131 deneyiminin temel ta\u015flar\u0131ndan biridir.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/angular-router-ile-query-parametrelerini-kullanma-rehberi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-04T15:40:43+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"15 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/angular-router-ile-query-parametrelerini-kullanma-rehberi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/angular-router-ile-query-parametrelerini-kullanma-rehberi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Angular Router ile Query Parametrelerini Kullanma Rehberi\",\"datePublished\":\"2025-12-04T15:40:43+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/angular-router-ile-query-parametrelerini-kullanma-rehberi\/\"},\"wordCount\":2066,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Angular\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/angular-router-ile-query-parametrelerini-kullanma-rehberi\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/angular-router-ile-query-parametrelerini-kullanma-rehberi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/angular-router-ile-query-parametrelerini-kullanma-rehberi\/\",\"name\":\"Angular Router ile Query Parametrelerini Kullanma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-12-04T15:40:43+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/angular-router-ile-query-parametrelerini-kullanma-rehberi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/angular-router-ile-query-parametrelerini-kullanma-rehberi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/angular-router-ile-query-parametrelerini-kullanma-rehberi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Angular Router ile Query Parametrelerini Kullanma Rehberi\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Angular Router ile Query Parametrelerini Kullanma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/angular-router-ile-query-parametrelerini-kullanma-rehberi\/","og_locale":"tr_TR","og_type":"article","og_title":"Angular Router ile Query Parametrelerini Kullanma Rehberi","og_description":"Angular Router ile Query Parametrelerini Kullanma Rehberi Angular uygulamalar\u0131nda y\u00f6nlendirme, kullan\u0131c\u0131 deneyiminin temel ta\u015flar\u0131ndan biridir.","og_url":"https:\/\/fatihsoysal.com\/blog\/angular-router-ile-query-parametrelerini-kullanma-rehberi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-12-04T15:40:43+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"15 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/angular-router-ile-query-parametrelerini-kullanma-rehberi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/angular-router-ile-query-parametrelerini-kullanma-rehberi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Angular Router ile Query Parametrelerini Kullanma Rehberi","datePublished":"2025-12-04T15:40:43+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/angular-router-ile-query-parametrelerini-kullanma-rehberi\/"},"wordCount":2066,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Angular"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/angular-router-ile-query-parametrelerini-kullanma-rehberi\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/angular-router-ile-query-parametrelerini-kullanma-rehberi\/","url":"https:\/\/fatihsoysal.com\/blog\/angular-router-ile-query-parametrelerini-kullanma-rehberi\/","name":"Angular Router ile Query Parametrelerini Kullanma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-12-04T15:40:43+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/angular-router-ile-query-parametrelerini-kullanma-rehberi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/angular-router-ile-query-parametrelerini-kullanma-rehberi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/angular-router-ile-query-parametrelerini-kullanma-rehberi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Angular Router ile Query Parametrelerini Kullanma Rehberi"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35853","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=35853"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35853\/revisions"}],"predecessor-version":[{"id":35854,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35853\/revisions\/35854"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=35853"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=35853"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=35853"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}