{"id":36438,"date":"2025-12-17T01:41:39","date_gmt":"2025-12-16T22:41:39","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=36438"},"modified":"2025-12-17T01:41:39","modified_gmt":"2025-12-16T22:41:39","slug":"ionic-events-nedir-ve-neden-kullanilir","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/ionic-events-nedir-ve-neden-kullanilir\/","title":{"rendered":"Ionic Events Nedir ve Neden Kullan\u0131l\u0131r?"},"content":{"rendered":"<p><body><\/p>\n<p>Modern mobil uygulama geli\u015ftirmede, farkl\u0131 sayfalar veya bile\u015fenler aras\u0131nda veri ve mesaj al\u0131\u015fveri\u015fi kritik bir ihtiya\u00e7t\u0131r. Ionic gibi bir framework ile uygulama geli\u015ftirirken, bile\u015fenler aras\u0131 ileti\u015fimi sa\u011flamak i\u00e7in \u00e7e\u015fitli y\u00f6ntemler bulunur. Bunlardan biri de Ionic&#8217;in kendi b\u00fcnyesinde sundu\u011fu <code>Events<\/code> mod\u00fcl\u00fcd\u00fcr. Bu rehberde, Ionic Events&#8217;in ne oldu\u011funu, nas\u0131l kullan\u0131ld\u0131\u011f\u0131n\u0131 ve uygulama i\u00e7inde veri ve mesaj ge\u00e7i\u015fi i\u00e7in nas\u0131l etkili bir ara\u00e7 olabilece\u011fini detayl\u0131 bir \u015fekilde inceleyece\u011fiz.<\/p>\n<h2>Ionic Events Nedir ve Neden Kullan\u0131l\u0131r?<\/h2>\n<p>Ionic Events, bir yay\u0131nla-abone ol (publish-subscribe) mekanizmas\u0131 \u00fczerine kurulu basit bir mesajla\u015fma servisidir. Temel amac\u0131, uygulaman\u0131zdaki farkl\u0131 ve genellikle birbiriyle do\u011frudan ili\u015fkisi olmayan bile\u015fenler aras\u0131nda veri ve mesajlar\u0131 gev\u015fek bir \u015fekilde ba\u011flayarak iletmektir. Bu, \u00f6zellikle bir bile\u015fenin ba\u015fka bir bile\u015fenin varl\u0131\u011f\u0131ndan haberdar olmadan ona mesaj g\u00f6ndermesi gerekti\u011fi durumlarda \u00e7ok kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<h3>Neden Events Kullanmal\u0131y\u0131z?<\/h3>\n<ul>\n<li><strong>Gev\u015fek Ba\u011flant\u0131 (Loose Coupling):<\/strong> Bile\u015fenler birbirlerini do\u011frudan bilmek zorunda kalmazlar. Bir olay yay\u0131nland\u0131\u011f\u0131nda, ilgilenen t\u00fcm aboneler bu olay\u0131 dinleyebilir ve tepki verebilir. Bu, kodun daha mod\u00fcler ve bak\u0131m\u0131 daha kolay olmas\u0131n\u0131 sa\u011flar.<\/li>\n<li><strong>Alakas\u0131z Bile\u015fenler Aras\u0131nda \u0130leti\u015fim:<\/strong> Birbirinden hiyerar\u015fik olarak uzak veya farkl\u0131 mod\u00fcllerde bulunan sayfalar ve bile\u015fenler aras\u0131nda veri aktar\u0131m\u0131 yapmak i\u00e7in idealdir. \u00d6rne\u011fin, bir kullan\u0131c\u0131 profilini g\u00fcncelledi\u011finde, uygulaman\u0131n farkl\u0131 bir b\u00f6l\u00fcm\u00fcndeki bir men\u00fcn\u00fcn veya g\u00f6sterge panelinin bu de\u011fi\u015fikli\u011fi an\u0131nda yans\u0131tmas\u0131n\u0131 sa\u011flayabilirsiniz.<\/li>\n<li><strong>Uygulama Geneli Olaylar:<\/strong> Kullan\u0131c\u0131 giri\u015fi\/\u00e7\u0131k\u0131\u015f\u0131, tema de\u011fi\u015fikli\u011fi, dil de\u011fi\u015fikli\u011fi veya bir hata bildirimi gibi uygulama genelindeki \u00f6nemli olaylar\u0131 y\u00f6netmek i\u00e7in kullan\u0131labilir.<\/li>\n<li><strong>Basitlik:<\/strong> Belirli senaryolar i\u00e7in, karma\u015f\u0131k durum y\u00f6netimi k\u00fct\u00fcphanelerine veya g\u00f6zlemlenebilir (Observable) ak\u0131\u015flar\u0131na k\u0131yasla daha basit ve h\u0131zl\u0131 bir \u00e7\u00f6z\u00fcm sunar.<\/li>\n<\/ul>\n<p>Events, \u00f6zellikle tek y\u00f6nl\u00fc, &#8220;ate\u015fle ve unut&#8221; (fire-and-forget) tarz\u0131 ileti\u015fim i\u00e7in uygundur. Bir olay yay\u0131nland\u0131\u011f\u0131nda, bu olay\u0131 dinleyen t\u00fcm aboneler ayn\u0131 anda bilgilendirilir. Geri d\u00f6n\u00fc\u015f de\u011feri beklemeyen veya karma\u015f\u0131k durum y\u00f6netimi gerektirmeyen senaryolarda Events, geli\u015ftiriciye b\u00fcy\u00fck kolayl\u0131k sa\u011flar.<\/p>\n<h2>Ionic Events Kurulumu ve Temel Kullan\u0131m<\/h2>\n<p>Ionic Events&#8217;i kullanmaya ba\u015flamak olduk\u00e7a basittir. \u0130lk ad\u0131m, <code>Events<\/code> mod\u00fcl\u00fcn\u00fc uygulaman\u0131z\u0131n ana mod\u00fcl\u00fcne veya ilgili hizmetlere dahil etmektir. Ancak Ionic 4 ve sonras\u0131 ile birlikte <code>@ionic\/angular<\/code> paketinden gelen <code>Events<\/code> mod\u00fcl\u00fc do\u011frudan kullan\u0131mdan kald\u0131r\u0131lm\u0131\u015f ve yerine RxJS&#8217;in <code>Subject<\/code> veya <code>BehaviorSubject<\/code> gibi ara\u00e7lar\u0131 \u00f6nerilmi\u015ftir. Yine de, Ionic&#8217;in eski s\u00fcr\u00fcmlerinden veya belirli uyumluluk katmanlar\u0131ndan gelen projelerde veya bu basit publish-subscribe modelini uygulamak istedi\u011finizde, kendiniz benzer bir servisi kolayca olu\u015fturabilir veya baz\u0131 k\u00fct\u00fcphaneleri kullanabilirsiniz. Bu rehber, genellikle Ionic&#8217;in eski <code>Events<\/code> mod\u00fcl\u00fcn\u00fcn \u00e7al\u0131\u015fma mant\u0131\u011f\u0131n\u0131 baz alarak ilerleyecek ve modern RxJS yakla\u015f\u0131mlar\u0131na da de\u011finecektir.<\/p>\n<p><strong>Not:<\/strong> Ionic 4+ kullan\u0131yorsan\u0131z, <code>Events<\/code> mod\u00fcl\u00fc do\u011frudan <code>@ionic\/angular<\/code> i\u00e7inde bulunmaz. Bu durumda, RxJS&#8217;in <code>Subject<\/code> veya <code>BehaviorSubject<\/code>&#8216;ini kullanan kendi Event Service&#8217;inizi olu\u015fturman\u0131z \u00f6nerilir. A\u015fa\u011f\u0131daki \u00f6rnekler, bu konsepte uygun olarak bir Event Service \u00fczerinden g\u00f6sterilecektir.<\/p>\n<h3>Event Servisi Olu\u015fturma (Modern Yakla\u015f\u0131m)<\/h3>\n<p>\u00d6ncelikle, uygulaman\u0131zda Event Service ad\u0131nda bir servis olu\u015ftural\u0131m. Bu servis, olaylar\u0131 yay\u0131nlamak ve dinlemek i\u00e7in RxJS <code>Subject<\/code> kullanacakt\u0131r.<\/p>\n<pre><code class=\"language-typescript\">\n\/\/ src\/app\/services\/event.service.ts\nimport { Injectable } from '@angular\/core';\nimport { Subject, Subscription } from 'rxjs';\nimport { filter, map } from 'rxjs\/operators';\n\ninterface EventData {\n  name: string;\n  data: any[];\n}\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class EventService {\n  private handler = new Subject<EventData>();\n\n  constructor() { }\n\n  \/<em><\/em>\n   * Olay yay\u0131nlar.\n   * @param name Olay\u0131n ad\u0131 (\u00f6rn: 'user:loggedIn')\n   * @param data Olayla birlikte g\u00f6nderilecek veriler\n   *\/\n  publish(name: string, ...data: any[]): void {\n    this.handler.next({ name, data });\n  }\n\n  \/<em><\/em>\n   * Bir olaya abone olur.\n   * @param name Abone olunacak olay\u0131n ad\u0131\n   * @param callback Olay tetiklendi\u011finde \u00e7al\u0131\u015facak fonksiyon\n   * @returns Abonelik nesnesi (bellek s\u0131z\u0131nt\u0131s\u0131n\u0131 \u00f6nlemek i\u00e7in kullan\u0131l\u0131r)\n   *\/\n  subscribe(name: string, callback: (...args: any[]) => void): Subscription {\n    return this.handler\n      .pipe(\n        filter(event => event.name === name),\n        map(event => event.data)\n      )\n      .subscribe(callback);\n  }\n\n  \/<em><\/em>\n   * Bir olaya ait t\u00fcm abonelikleri veya belirli bir aboneli\u011fi iptal eder.\n   * Not: RxJS Subscription'lar\u0131 do\u011frudan y\u00f6netmek genellikle daha iyidir.\n   * Bu metot, eski Ionic Events'teki unsubscribe mant\u0131\u011f\u0131n\u0131 taklit eder.\n   * @param name \u0130ptal edilecek olay\u0131n ad\u0131\n   * @param callback \u0130ptal edilecek belirli bir callback fonksiyonu (iste\u011fe ba\u011fl\u0131)\n   *\/\n  unsubscribe(name: string, callback?: (...args: any[]) => void): void {\n    \/\/ RxJS Subject'ler i\u00e7in do\u011frudan bir 'unsubscribe by name' metodu yoktur.\n    \/\/ Her subscribe \u00e7a\u011fr\u0131s\u0131 bir Subscription nesnesi d\u00f6nd\u00fcr\u00fcr ve bu nesne \u00fczerinden unsubscribe olunur.\n    \/\/ Bu metot, eski Events API'sini taklit etmek i\u00e7in buraya konulmu\u015ftur,\n    \/\/ ancak modern RxJS kullan\u0131m\u0131nda her subscribe \u00e7a\u011fr\u0131s\u0131n\u0131n d\u00f6nd\u00fcrd\u00fc\u011f\u00fc\n    \/\/ Subscription nesnesini saklay\u0131p ngOnDestroy i\u00e7inde unsubscribe etmek daha do\u011fru bir yakla\u015f\u0131md\u0131r.\n    console.warn('EventService.unsubscribe: RxJS ile do\u011frudan olay ad\u0131na g\u00f6re unsubscribing \u00f6nerilmez. Her subscribe \u00e7a\u011fr\u0131s\u0131n\u0131n d\u00f6nd\u00fcrd\u00fc\u011f\u00fc Subscription nesnesini kullanarak unsubscribe olunuz.');\n  }\n}\n<\/code><\/pre>\n<h3>Olay Yay\u0131mlama (Publishing Events)<\/h3>\n<p>Bir olay yay\u0131nlamak i\u00e7in, <code>EventService<\/code>&#8216;i sayfan\u0131za veya bile\u015feninize enjekte etmeniz ve <code>publish()<\/code> metodunu kullanman\u0131z gerekir. \u0130lk parametre olay\u0131n ad\u0131d\u0131r (genellikle <code>kategori:eylem<\/code> format\u0131nda), sonraki parametreler ise olayla birlikte g\u00f6ndermek istedi\u011finiz verilerdir.<\/p>\n<pre><code class=\"language-typescript\">\n\/\/ src\/app\/pages\/login\/login.page.ts\nimport { Component } from '@angular\/core';\nimport { NavController } from '@ionic\/angular';\nimport { EventService } from '..\/..\/services\/event.service'; \/\/ EventService'i import edin\n\n@Component({\n  selector: 'app-login',\n  templateUrl: '.\/login.page.html',\n  styleUrls: ['.\/login.page.scss'],\n})\nexport class LoginPage {\n  username: string = '';\n  password: string = '';\n\n  constructor(\n    private navCtrl: NavController,\n    private eventService: EventService \/\/ EventService'i enjekte edin\n  ) {}\n\n  async login() {\n    \/\/ Kullan\u0131c\u0131 do\u011frulama i\u015flemleri burada yap\u0131l\u0131r\n    if (this.username === 'test' && this.password === '123') {\n      console.log('Kullan\u0131c\u0131 ba\u015far\u0131yla giri\u015f yapt\u0131.');\n      \/\/ Giri\u015f ba\u015far\u0131l\u0131 oldu\u011funda bir olay yay\u0131nla\n      this.eventService.publish('user:loggedIn', { username: this.username, timestamp: Date.now() });\n      this.navCtrl.navigateRoot('\/dashboard'); \/\/ Dashboard sayfas\u0131na y\u00f6nlendir\n    } else {\n      console.log('Ge\u00e7ersiz kullan\u0131c\u0131 ad\u0131 veya \u015fifre.');\n      \/\/ Hata durumunda da bir olay yay\u0131nlanabilir\n      this.eventService.publish('auth:failed', 'Kullan\u0131c\u0131 ad\u0131 veya \u015fifre yanl\u0131\u015f.');\n    }\n  }\n}\n<\/code><\/pre>\n<h3>Olay Dinleme (Subscribing to Events)<\/h3>\n<p>Bir olay\u0131 dinlemek i\u00e7in yine <code>EventService<\/code>&#8216;i enjekte etmeniz ve <code>subscribe()<\/code> metodunu kullanman\u0131z gerekir. \u0130lk parametre dinlemek istedi\u011finiz olay\u0131n ad\u0131d\u0131r, ikinci parametre ise olay tetiklendi\u011finde \u00e7al\u0131\u015facak bir geri \u00e7a\u011f\u0131rma (callback) fonksiyonudur. Bu fonksiyon, olayla birlikte g\u00f6nderilen verileri parametre olarak al\u0131r.<\/p>\n<pre><code class=\"language-typescript\">\n\/\/ src\/app\/pages\/dashboard\/dashboard.page.ts\nimport { Component, OnInit, OnDestroy } from '@angular\/core';\nimport { EventService } from '..\/..\/services\/event.service';\nimport { Subscription } from 'rxjs';\n\n@Component({\n  selector: 'app-dashboard',\n  templateUrl: '.\/dashboard.page.html',\n  styleUrls: ['.\/dashboard.page.scss'],\n})\nexport class DashboardPage implements OnInit, OnDestroy {\n  welcomeMessage: string = 'Ho\u015f geldiniz!';\n  private userLoggedInSubscription: Subscription;\n  private authFailedSubscription: Subscription;\n\n  constructor(private eventService: EventService) {}\n\n  ngOnInit() {\n    \/\/ 'user:loggedIn' olay\u0131na abone ol\n    this.userLoggedInSubscription = this.eventService.subscribe('user:loggedIn', (userData) => {\n      console.log('Dashboard: user:loggedIn olay\u0131 al\u0131nd\u0131', userData);\n      this.welcomeMessage = <code>Ho\u015f geldiniz, ${userData.username}! Son giri\u015f: ${new Date(userData.timestamp).toLocaleTimeString()}<\/code>;\n    });\n\n    \/\/ 'auth:failed' olay\u0131na da abone ol (e\u011fer bir hata mesaj\u0131 g\u00f6stermek istersek)\n    this.authFailedSubscription = this.eventService.subscribe('auth:failed', (errorMessage) => {\n      console.error('Dashboard: auth:failed olay\u0131 al\u0131nd\u0131', errorMessage);\n      \/\/ Hata mesaj\u0131n\u0131 kullan\u0131c\u0131ya g\u00f6stermek i\u00e7in bir toast veya alert kullan\u0131labilir.\n    });\n  }\n\n  ngOnDestroy() {\n    \/\/ Bellek s\u0131z\u0131nt\u0131lar\u0131n\u0131 \u00f6nlemek i\u00e7in abonelikten \u00e7\u0131k\u0131n\n    if (this.userLoggedInSubscription) {\n      this.userLoggedInSubscription.unsubscribe();\n    }\n    if (this.authFailedSubscription) {\n      this.authFailedSubscription.unsubscribe();\n    }\n  }\n}\n<\/code><\/pre>\n<h3>Abonelikten \u00c7\u0131kma (Unsubscribing from Events)<\/h3>\n<p>Bellek s\u0131z\u0131nt\u0131lar\u0131n\u0131 \u00f6nlemek i\u00e7in, bir bile\u015fen yok edildi\u011finde (\u00f6rne\u011fin, sayfadan ayr\u0131ld\u0131\u011f\u0131n\u0131zda) olay aboneliklerinden \u00e7\u0131kmak <strong>\u00e7ok \u00f6nemlidir<\/strong>. RxJS <code>subscribe()<\/code> metodu bir <code>Subscription<\/code> nesnesi d\u00f6nd\u00fcr\u00fcr. Bu nesnenin <code>unsubscribe()<\/code> metodunu \u00e7a\u011f\u0131rarak aboneli\u011fi iptal edebilirsiniz. Bu i\u015flem genellikle bile\u015fenin <code>ngOnDestroy<\/code> ya\u015fam d\u00f6ng\u00fcs\u00fc metodunda yap\u0131l\u0131r.<\/p>\n<p>Yukar\u0131daki <code>DashboardPage<\/code> \u00f6rne\u011finde <code>ngOnDestroy<\/code> metodunda abonelikten \u00e7\u0131kma i\u015flemi g\u00f6sterilmi\u015ftir. Bu, bir bile\u015fen art\u0131k olaylar\u0131 dinlemedi\u011finde, bellekte gereksiz referanslar\u0131n kalmas\u0131n\u0131 ve performans sorunlar\u0131na yol a\u00e7mas\u0131n\u0131 engeller.<\/p>\n<h2>Pratik Kullan\u0131m Senaryolar\u0131 ve En \u0130yi Uygulamalar<\/h2>\n<p>Ionic Events (veya kendi Event Service&#8217;iniz) ile neler yapabilece\u011finizi ve bu arac\u0131 en iyi nas\u0131l kullanabilece\u011finizi anlamak, uygulaman\u0131z\u0131n mimarisini g\u00fc\u00e7lendirecektir.<\/p>\n<h3>Farkl\u0131 Sayfalar Aras\u0131nda Veri Aktar\u0131m\u0131<\/h3>\n<p>En yayg\u0131n kullan\u0131m senaryolar\u0131ndan biri, uygulama i\u00e7inde farkl\u0131 yerlerdeki sayfalar veya bile\u015fenler aras\u0131nda veri senkronizasyonudur. \u00d6rne\u011fin, bir kullan\u0131c\u0131n\u0131n profil sayfas\u0131nda yapt\u0131\u011f\u0131 bir de\u011fi\u015fikli\u011fi, uygulaman\u0131n ana sayfas\u0131ndaki avatar\u0131nda veya men\u00fcs\u00fcnde an\u0131nda g\u00f6stermek isteyebilirsiniz.<\/p>\n<pre><code class=\"language-typescript\">\n\/\/ src\/app\/pages\/profile\/profile.page.ts\nimport { Component } from '@angular\/core';\nimport { EventService } from '..\/..\/services\/event.service';\n\n@Component({\n  selector: 'app-profile',\n  templateUrl: '.\/profile.page.html',\n  styleUrls: ['.\/profile.page.scss'],\n})\nexport class ProfilePage {\n  userName: string = 'John Doe';\n  userEmail: string = 'john.doe@example.com';\n\n  constructor(private eventService: EventService) {}\n\n  saveProfile() {\n    \/\/ Profil g\u00fcncelleme API \u00e7a\u011fr\u0131s\u0131 burada yap\u0131l\u0131r\n    console.log('Profil g\u00fcncellendi:', this.userName, this.userEmail);\n    \/\/ Profil g\u00fcncellendi\u011finde bir olay yay\u0131nla\n    this.eventService.publish('profile:updated', {\n      name: this.userName,\n      email: this.userEmail,\n      timestamp: Date.now()\n    });\n  }\n}\n\n\/\/ src\/app\/components\/user-menu\/user-menu.component.ts (veya ba\u015fka bir sayfa)\nimport { Component, OnInit, OnDestroy } from '@angular\/core';\nimport { EventService } from '..\/..\/services\/event.service';\nimport { Subscription } from 'rxjs';\n\n@Component({\n  selector: 'app-user-menu',\n  templateUrl: '.\/user-menu.component.html',\n  styleUrls: ['.\/user-menu.component.scss'],\n})\nexport class UserMenuComponent implements OnInit, OnDestroy {\n  displayName: string = 'Misafir';\n  private profileUpdateSubscription: Subscription;\n\n  constructor(private eventService: EventService) {}\n\n  ngOnInit() {\n    this.profileUpdateSubscription = this.eventService.subscribe('profile:updated', (profileData) => {\n      console.log('UserMenu: profile:updated olay\u0131 al\u0131nd\u0131', profileData);\n      this.displayName = profileData.name;\n    });\n  }\n\n  ngOnDestroy() {\n    if (this.profileUpdateSubscription) {\n      this.profileUpdateSubscription.unsubscribe();\n    }\n  }\n}\n<\/code><\/pre>\n<h3>Uygulama Genelinde Mesajla\u015fma<\/h3>\n<p>Uygulaman\u0131z\u0131n herhangi bir yerinden tetikleyebilece\u011finiz ve uygulaman\u0131n farkl\u0131 b\u00f6l\u00fcmlerinde yakalayabilece\u011finiz genel mesajlar i\u00e7in Events \u00e7ok kullan\u0131\u015fl\u0131d\u0131r. \u00d6rne\u011fin, bir HTTP iste\u011fi ba\u015far\u0131s\u0131z oldu\u011funda bir hata mesaj\u0131 g\u00f6stermek veya bir i\u015flem tamamland\u0131\u011f\u0131nda bir bildirim yay\u0131nlamak.<\/p>\n<pre><code class=\"language-typescript\">\n\/\/ src\/app\/services\/api.service.ts\nimport { Injectable } from '@angular\/core';\nimport { HttpClient } from '@angular\/common\/http';\nimport { EventService } from '.\/event.service';\nimport { catchError } from 'rxjs\/operators';\nimport { throwError } from 'rxjs';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ApiService {\n  constructor(private http: HttpClient, private eventService: EventService) {}\n\n  fetchData() {\n    return this.http.get('https:\/\/api.example.com\/data').pipe(\n      catchError(error => {\n        this.eventService.publish('app:error', 'Veri \u00e7ekme hatas\u0131: ' + error.message);\n        return throwError(error);\n      })\n    );\n  }\n}\n\n\/\/ src\/app\/app.component.ts (Uygulaman\u0131n ana bile\u015feni)\nimport { Component, OnInit, OnDestroy } from '@angular\/core';\nimport { ToastController } from '@ionic\/angular';\nimport { EventService } from '.\/services\/event.service';\nimport { Subscription } from 'rxjs';\n\n@Component({\n  selector: 'app-root',\n  templateUrl: 'app.component.html',\n  styleUrls: ['app.component.scss'],\n})\nexport class AppComponent implements OnInit, OnDestroy {\n  private appErrorSubscription: Subscription;\n\n  constructor(\n    private toastController: ToastController,\n    private eventService: EventService\n  ) {}\n\n  ngOnInit() {\n    this.appErrorSubscription = this.eventService.subscribe('app:error', async (message) => {\n      const toast = await this.toastController.create({\n        message: message,\n        duration: 3000,\n        color: 'danger'\n      });\n      toast.present();\n    });\n  }\n\n  ngOnDestroy() {\n    if (this.appErrorSubscription) {\n      this.appErrorSubscription.unsubscribe();\n    }\n  }\n}\n<\/code><\/pre>\n<h3>Performans ve Bellek Y\u00f6netimi<\/h3>\n<ul>\n<li><strong>Abonelikten \u00c7\u0131kma (Unsubscribe):<\/strong> Daha \u00f6nce de belirtildi\u011fi gibi, bellek s\u0131z\u0131nt\u0131lar\u0131n\u0131 \u00f6nlemek i\u00e7in her zaman abonelikten \u00e7\u0131k\u0131n. \u00d6zellikle sayfalar veya bile\u015fenler yok edildi\u011finde (<code>ngOnDestroy<\/code> i\u00e7inde) bu kritik \u00f6neme sahiptir.<\/li>\n<li><strong>A\u015f\u0131r\u0131 Kullan\u0131mdan Ka\u00e7\u0131n\u0131n:<\/strong> Events g\u00fc\u00e7l\u00fc bir ara\u00e7 olsa da, her t\u00fcrl\u00fc veri aktar\u0131m\u0131 i\u00e7in kullan\u0131lmamal\u0131d\u0131r. Ebeveyn-\u00e7ocuk bile\u015fen ileti\u015fimi i\u00e7in <code>@Input()<\/code> ve <code>@Output()<\/code>, daha karma\u015f\u0131k veya s\u00fcrekli veri ak\u0131\u015flar\u0131 i\u00e7in RxJS <code>Subject<\/code>\/<code>BehaviorSubject<\/code> i\u00e7eren hizmetler veya merkezi durum y\u00f6netimi \u00e7\u00f6z\u00fcmleri (NGRX, Akita) daha uygun olabilir. Events, \u00f6zellikle gev\u015fek ba\u011flant\u0131n\u0131n ve tek y\u00f6nl\u00fc mesajla\u015fman\u0131n \u00f6nemli oldu\u011fu durumlarda parlar.<\/li>\n<li><strong>Olay Adland\u0131rma Kurallar\u0131:<\/strong> Olay adlar\u0131n\u0131 a\u00e7\u0131klay\u0131c\u0131 ve benzersiz tutun (\u00f6rn: <code>mod\u00fcl:eylem<\/code> veya <code>kaynak:durum<\/code>). Bu, uygulaman\u0131z b\u00fcy\u00fcd\u00fck\u00e7e olaylar\u0131 takip etmenize ve \u00e7ak\u0131\u015fmalar\u0131 \u00f6nlemenize yard\u0131mc\u0131 olur.<\/li>\n<\/ul>\n<h3>Alternatif Yakla\u015f\u0131mlar ve Ne Zaman Events Kullanmal\u0131?<\/h3>\n<p>Ionic\/Angular ekosisteminde veri aktar\u0131m\u0131 i\u00e7in farkl\u0131 y\u00f6ntemler mevcuttur:<\/p>\n<ul>\n<li><strong>@Input() \/ @Output():<\/strong> Ebeveyn-\u00e7ocuk bile\u015fenleri aras\u0131ndaki do\u011frudan ileti\u015fim i\u00e7in idealdir. Net bir hiyerar\u015fi varsa tercih edilmelidir.<\/li>\n<li><strong>Servisler (Services) ve RxJS Subject\/BehaviorSubject:<\/strong> Uygulama genelinde durumu y\u00f6netmek, bile\u015fenler aras\u0131 s\u00fcrekli veri ak\u0131\u015f\u0131 sa\u011flamak ve birbiriyle ili\u015fkili olmayan bile\u015fenler aras\u0131nda daha karma\u015f\u0131k ileti\u015fim kurmak i\u00e7in en esnek ve g\u00fc\u00e7l\u00fc y\u00f6ntemdir. Events&#8217;in basit &#8220;ate\u015fle ve unut&#8221; modelinden farkl\u0131 olarak, Subject&#8217;ler veri ak\u0131\u015f\u0131n\u0131 izleyebilir, mevcut de\u011feri tutabilir (BehaviorSubject) ve daha zengin operat\u00f6rlerle i\u015flenebilir.<\/li>\n<li><strong>Router Parametreleri:<\/strong> Sayfalar aras\u0131 ge\u00e7i\u015f yaparken URL \u00fczerinden k\u00fc\u00e7\u00fck miktarda veri aktarmak i\u00e7in kullan\u0131l\u0131r. \u00d6zellikle bir \u00f6\u011fenin ID&#8217;si gibi bilgileri ta\u015f\u0131mak i\u00e7in uygundur.<\/li>\n<\/ul>\n<p><strong>Events (veya Event Service) Ne Zaman Kullan\u0131lmal\u0131?<\/strong><\/p>\n<ul>\n<li>Bile\u015fenler aras\u0131 ba\u011flant\u0131n\u0131n \u00e7ok gev\u015fek olmas\u0131 gerekti\u011fi durumlarda.<\/li>\n<li>Bile\u015fenler hiyerar\u015fik olarak \u00e7ok uzak oldu\u011funda ve do\u011frudan <code>@Input()<\/code>\/<code>@Output()<\/code> kullan\u0131m\u0131 karma\u015f\u0131k hale geldi\u011finde.<\/li>\n<li>Uygulama genelinde bildirimler veya &#8220;ate\u015fle ve unut&#8221; tarz\u0131 tek seferlik mesajlar g\u00f6ndermek istedi\u011finizde.<\/li>\n<li>Basit bir publish-subscribe mekanizmas\u0131na ihtiya\u00e7 duydu\u011funuzda ve RxJS&#8217;in t\u00fcm karma\u015f\u0131kl\u0131\u011f\u0131na girmek istemedi\u011finizde (ancak yukar\u0131daki EventService \u00f6rne\u011fi, RxJS&#8217;i Events benzeri bir aray\u00fczle sarmalayarak bu basitli\u011fi sunar).<\/li>\n<\/ul>\n<p><strong>Events Ne Zaman Kullan\u0131lmamal\u0131?<\/strong><\/p>\n<ul>\n<li>Ebeveyn-\u00e7ocuk ili\u015fkisi net olan bile\u015fenler aras\u0131nda (<code>@Input<\/code> \/ <code>@Output<\/code> kullan\u0131n).<\/li>\n<li>Karma\u015f\u0131k durum y\u00f6netimi veya s\u00fcrekli veri ak\u0131\u015f\u0131 gerektiren durumlarda (RxJS Subject\/BehaviorSubject veya durum y\u00f6netimi k\u00fct\u00fcphaneleri kullan\u0131n).<\/li>\n<li>Bir mesaj g\u00f6nderildikten sonra bir geri d\u00f6n\u00fc\u015f veya yan\u0131t bekledi\u011finizde.<\/li>\n<\/ul>\n<h2>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h2>\n<p>Ionic Events (veya RxJS tabanl\u0131 kendi Event Service&#8217;iniz), uygulaman\u0131zdaki farkl\u0131 bile\u015fenler aras\u0131nda gev\u015fek ba\u011fl\u0131 ve etkili bir \u015fekilde veri ve mesaj aktar\u0131m\u0131 sa\u011flamak i\u00e7in g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r. Do\u011fru kullan\u0131ld\u0131\u011f\u0131nda, kodunuzun daha temiz, daha mod\u00fcler ve bak\u0131m\u0131 daha kolay olmas\u0131na yard\u0131mc\u0131 olabilir. Ancak, her ara\u00e7 gibi, Events&#8217;in de ne zaman ve nas\u0131l kullan\u0131laca\u011f\u0131n\u0131 bilmek \u00f6nemlidir. Bellek s\u0131z\u0131nt\u0131lar\u0131n\u0131 \u00f6nlemek i\u00e7in abonelikten \u00e7\u0131kma ve a\u015f\u0131r\u0131 kullan\u0131mdan ka\u00e7\u0131nma, bu arac\u0131n etkinli\u011fini maksimize etmek i\u00e7in temel prensiplerdir.<\/p>\n<h3>SSS (S\u0131k\u00e7a Sorulan Sorular)<\/h3>\n<h3>Events ile Services (RxJS Subject\/BehaviorSubject ile) aras\u0131ndaki fark nedir?<\/h3>\n<p>Ionic&#8217;in eski <code>Events<\/code> mod\u00fcl\u00fc, basit bir &#8220;ate\u015fle ve unut&#8221; publish-subscribe mekanizmas\u0131 sunuyordu. RxJS <code>Subject<\/code> veya <code>BehaviorSubject<\/code> kullanan servisler ise daha g\u00fc\u00e7l\u00fc ve esnektir. <code>Subject<\/code>&#8216;ler olay ak\u0131\u015flar\u0131n\u0131 y\u00f6netebilir, <code>BehaviorSubject<\/code>&#8216;ler ise son yay\u0131nlanan de\u011feri tutarak yeni abonelerin an\u0131nda bu de\u011fere eri\u015fmesini sa\u011flar. Servisler genellikle uygulama genelinde durumu y\u00f6netmek ve s\u00fcrekli veri ak\u0131\u015flar\u0131n\u0131 i\u015flemek i\u00e7in kullan\u0131l\u0131rken, Events daha \u00e7ok tek seferlik, anl\u0131k mesajla\u015fma i\u00e7in tercih edilir. Modern Ionic projelerinde, <code>Events<\/code> yerine RxJS tabanl\u0131 servisler kullanmak daha yayg\u0131n ve \u00f6nerilen bir yakla\u015f\u0131md\u0131r.<\/p>\n<h3>Events yerine RxJS Subject kullanmak daha m\u0131 iyi?<\/h3>\n<p>Genellikle evet. RxJS Subject&#8217;ler, Ionic Events&#8217;in sundu\u011fu t\u00fcm i\u015flevselli\u011fi ve \u00e7ok daha fazlas\u0131n\u0131 sunar. Daha zengin operat\u00f6rler (<code>map<\/code>, <code>filter<\/code>, <code>debounceTime<\/code> vb.) ile olay ak\u0131\u015flar\u0131n\u0131 manip\u00fcle edebilir, bir ak\u0131\u015f\u0131n mevcut durumunu tutabilir (<code>BehaviorSubject<\/code>) ve daha karma\u015f\u0131k senaryolar\u0131 y\u00f6netebilirsiniz. Bu rehberde g\u00f6sterilen <code>EventService<\/code>, asl\u0131nda RxJS <code>Subject<\/code>&#8216;i kullanarak Ionic Events&#8217;e benzer bir aray\u00fcz sa\u011flamaktad\u0131r. Bu, her iki d\u00fcnyan\u0131n da en iyi y\u00f6nlerini birle\u015ftiren iyi bir yakla\u015f\u0131md\u0131r.<\/p>\n<h3>Abonelikten \u00e7\u0131kmay\u0131 unutursam ne olur?<\/h3>\n<p>Abonelikten \u00e7\u0131kmay\u0131 unutursan\u0131z, bellek s\u0131z\u0131nt\u0131lar\u0131na yol a\u00e7ars\u0131n\u0131z. Bile\u015feniniz yok edilmi\u015f olsa bile, olay dinleyicisi bellekte kalmaya devam eder ve olaylar tetiklendi\u011finde gereksiz yere \u00e7al\u0131\u015f\u0131r. Bu durum, uygulaman\u0131z\u0131n performans\u0131n\u0131 d\u00fc\u015f\u00fcrebilir ve beklenmedik davran\u0131\u015flara neden olabilir. Her zaman <code>ngOnDestroy<\/code> ya\u015fam d\u00f6ng\u00fcs\u00fc metodunda aboneliklerinizi iptal etti\u011finizden emin olun.<\/p>\n<h3>Events ile ka\u00e7 parametre g\u00f6nderebilirim?<\/h3>\n<p>Teknik olarak s\u0131n\u0131rs\u0131z say\u0131da parametre g\u00f6nderebilirsiniz (<code>publish('event:name', param1, param2, param3, ...)<\/code>). Ancak pratik olarak, genellikle tek bir JavaScript nesnesi i\u00e7inde t\u00fcm ilgili verileri gruplamak daha d\u00fczenli ve okunabilir bir yakla\u015f\u0131md\u0131r (\u00f6rn: <code>publish('user:loggedIn', { username: 'test', id: 123, timestamp: Date.now() })<\/code>).<\/p>\n<h3>Event isimleri nas\u0131l olmal\u0131?<\/h3>\n<p>Event isimleri a\u00e7\u0131klay\u0131c\u0131, benzersiz ve genellikle bir &#8220;konu:eylem&#8221; veya &#8220;kaynak:durum&#8221; format\u0131nda olmal\u0131d\u0131r. \u00d6rne\u011fin, <code>user:loggedIn<\/code>, <code>profile:updated<\/code>, <code>data:refresh<\/code>, <code>app:error<\/code> gibi isimler olay\u0131n ne hakk\u0131nda oldu\u011funu ve ne zaman tetiklendi\u011fini a\u00e7\u0131k\u00e7a belirtir. Bu, uygulaman\u0131z b\u00fcy\u00fcd\u00fck\u00e7e olaylar\u0131 y\u00f6netmeyi ve hata ay\u0131klamay\u0131 kolayla\u015ft\u0131r\u0131r.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Modern mobil uygulama geli\u015ftirmede, farkl\u0131 sayfalar veya bile\u015fenler aras\u0131nda veri ve mesaj al\u0131\u015fveri\u015fi kritik bir ihtiya\u00e7t\u0131r. Ionic gibi bir","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":[1],"tags":[],"class_list":{"0":"post-36438","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","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>Ionic Events Nedir ve Neden Kullan\u0131l\u0131r? - 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\/ionic-events-nedir-ve-neden-kullanilir\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ionic Events Nedir ve Neden Kullan\u0131l\u0131r?\" \/>\n<meta property=\"og:description\" content=\"Modern mobil uygulama geli\u015ftirmede, farkl\u0131 sayfalar veya bile\u015fenler aras\u0131nda veri ve mesaj al\u0131\u015fveri\u015fi kritik bir ihtiya\u00e7t\u0131r. Ionic gibi bir\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/ionic-events-nedir-ve-neden-kullanilir\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-16T22:41:39+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\/ionic-events-nedir-ve-neden-kullanilir\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ionic-events-nedir-ve-neden-kullanilir\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Ionic Events Nedir ve Neden Kullan\u0131l\u0131r?\",\"datePublished\":\"2025-12-16T22:41:39+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ionic-events-nedir-ve-neden-kullanilir\/\"},\"wordCount\":1909,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/ionic-events-nedir-ve-neden-kullanilir\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ionic-events-nedir-ve-neden-kullanilir\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/ionic-events-nedir-ve-neden-kullanilir\/\",\"name\":\"Ionic Events Nedir ve Neden Kullan\u0131l\u0131r? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-12-16T22:41:39+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ionic-events-nedir-ve-neden-kullanilir\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/ionic-events-nedir-ve-neden-kullanilir\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ionic-events-nedir-ve-neden-kullanilir\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ionic Events Nedir ve Neden Kullan\u0131l\u0131r?\"}]},{\"@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":"Ionic Events Nedir ve Neden Kullan\u0131l\u0131r? - 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\/ionic-events-nedir-ve-neden-kullanilir\/","og_locale":"tr_TR","og_type":"article","og_title":"Ionic Events Nedir ve Neden Kullan\u0131l\u0131r?","og_description":"Modern mobil uygulama geli\u015ftirmede, farkl\u0131 sayfalar veya bile\u015fenler aras\u0131nda veri ve mesaj al\u0131\u015fveri\u015fi kritik bir ihtiya\u00e7t\u0131r. Ionic gibi bir","og_url":"https:\/\/fatihsoysal.com\/blog\/ionic-events-nedir-ve-neden-kullanilir\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-12-16T22:41:39+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\/ionic-events-nedir-ve-neden-kullanilir\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/ionic-events-nedir-ve-neden-kullanilir\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Ionic Events Nedir ve Neden Kullan\u0131l\u0131r?","datePublished":"2025-12-16T22:41:39+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/ionic-events-nedir-ve-neden-kullanilir\/"},"wordCount":1909,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/ionic-events-nedir-ve-neden-kullanilir\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/ionic-events-nedir-ve-neden-kullanilir\/","url":"https:\/\/fatihsoysal.com\/blog\/ionic-events-nedir-ve-neden-kullanilir\/","name":"Ionic Events Nedir ve Neden Kullan\u0131l\u0131r? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-12-16T22:41:39+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/ionic-events-nedir-ve-neden-kullanilir\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/ionic-events-nedir-ve-neden-kullanilir\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/ionic-events-nedir-ve-neden-kullanilir\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Ionic Events Nedir ve Neden Kullan\u0131l\u0131r?"}]},{"@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\/36438","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=36438"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/36438\/revisions"}],"predecessor-version":[{"id":36439,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/36438\/revisions\/36439"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=36438"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=36438"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=36438"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}