{"id":32777,"date":"2025-10-25T21:41:05","date_gmt":"2025-10-25T18:41:05","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=32777"},"modified":"2025-10-25T21:41:05","modified_gmt":"2025-10-25T18:41:05","slug":"angularda-bilesen-etkilesimi-ciktilar-outputs-ile-yukari-akisli-veri-iletisimi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/angularda-bilesen-etkilesimi-ciktilar-outputs-ile-yukari-akisli-veri-iletisimi\/","title":{"rendered":"Angular&#8217;da Bile\u015fen Etkile\u015fimi: \u00c7\u0131kt\u0131lar (Outputs) ile Yukar\u0131 Ak\u0131\u015fl\u0131 Veri \u0130leti\u015fimi"},"content":{"rendered":"<p><body><\/p>\n<h2>Angular&#8217;da Bile\u015fen Etkile\u015fimi: \u00c7\u0131kt\u0131lar (Outputs) ile Yukar\u0131 Ak\u0131\u015fl\u0131 Veri \u0130leti\u015fimi<\/h2>\n<p>Angular, modern web uygulamalar\u0131 geli\u015ftirmek i\u00e7in g\u00fc\u00e7l\u00fc ve esnek bir \u00e7er\u00e7evedir. Bu \u00e7er\u00e7evenin temel ta\u015flar\u0131ndan biri, uygulaman\u0131n farkl\u0131 b\u00f6l\u00fcmlerini olu\u015fturan bile\u015fenlerdir. Ancak bir uygulaman\u0131n i\u015flevselli\u011fi, bu bile\u015fenlerin izole bir \u015fekilde \u00e7al\u0131\u015fmas\u0131ndan ziyade, birbirleriyle etkile\u015fim kurma yeteneklerine ba\u011fl\u0131d\u0131r. Bile\u015fenler aras\u0131 ileti\u015fim, uygulaman\u0131n karma\u015f\u0131kl\u0131\u011f\u0131n\u0131 y\u00f6netmek, kod tekrar\u0131n\u0131 azaltmak ve daha mod\u00fcler yap\u0131lar olu\u015fturmak i\u00e7in hayati \u00f6neme sahiptir. Bu makalede, Angular&#8217;da bile\u015fenler aras\u0131 ileti\u015fimin en \u00f6nemli y\u00f6ntemlerinden biri olan &#8220;\u00c7\u0131kt\u0131lar (Outputs)&#8221; mekanizmas\u0131n\u0131, yani alt bile\u015fenlerden \u00fcst bile\u015fenlere veri veya olay ak\u0131\u015f\u0131n\u0131 derinlemesine inceleyece\u011fiz.<\/p>\n<h3>Giri\u015f: Bile\u015fen \u0130leti\u015fiminin \u00d6nemi<\/h3>\n<p>Angular uygulamalar\u0131, genellikle bir bile\u015fen a\u011fac\u0131 \u015feklinde organize edilir. En \u00fcstte bir k\u00f6k bile\u015fen (\u00f6rne\u011fin <code>AppComponent<\/code>) bulunur ve bu bile\u015fen, alt bile\u015fenleri bar\u0131nd\u0131r\u0131r. Bu alt bile\u015fenler de kendi alt bile\u015fenlerine sahip olabilir. Bu hiyerar\u015fik yap\u0131 i\u00e7erisinde, farkl\u0131 seviyelerdeki bile\u015fenlerin birbirleriyle konu\u015fmas\u0131 gerekir. \u00d6rne\u011fin, bir &#8220;\u00fcr\u00fcn kart\u0131&#8221; bile\u015feni (alt bile\u015fen), &#8220;sepete ekle&#8221; d\u00fc\u011fmesine t\u0131kland\u0131\u011f\u0131nda bu bilgiyi &#8220;sepet&#8221; bile\u015fenine (\u00fcst bile\u015fen) iletmek isteyebilir. Ya da bir &#8220;form alan\u0131&#8221; bile\u015feni, kullan\u0131c\u0131n\u0131n girdi\u011fi veriyi ana &#8220;form&#8221; bile\u015fenine bildirmelidir.<\/p>\n<p>Angular, bu t\u00fcr ileti\u015fim senaryolar\u0131n\u0131 y\u00f6netmek i\u00e7in \u00e7e\u015fitli mekanizmalar sunar:<br \/>\n*   <strong><code>@Input<\/code> Dekorat\u00f6r\u00fc:<\/strong> \u00dcst bile\u015fenden alt bile\u015fene veri ak\u0131\u015f\u0131 i\u00e7in kullan\u0131l\u0131r. (&#8220;A\u015fa\u011f\u0131 ak\u0131\u015fl\u0131 ileti\u015fim&#8221;)<br \/>\n*   <strong><code>@Output<\/code> Dekorat\u00f6r\u00fc ve <code>EventEmitter<\/code>:<\/strong> Alt bile\u015fenden \u00fcst bile\u015fene olay veya veri ak\u0131\u015f\u0131 i\u00e7in kullan\u0131l\u0131r. (&#8220;Yukar\u0131 ak\u0131\u015fl\u0131 ileti\u015fim&#8221;)<br \/>\n*   <strong>Servisler:<\/strong> Ba\u011f\u0131ms\u0131z bile\u015fenler aras\u0131nda veya ayn\u0131 seviyedeki bile\u015fenler aras\u0131nda genel durum y\u00f6netimi ve veri payla\u015f\u0131m\u0131 i\u00e7in kullan\u0131l\u0131r.<br \/>\n*   <strong><code>ViewChild<\/code> \/ <code>ViewChildren<\/code>:<\/strong> \u00dcst bile\u015fenin alt bile\u015fenlerine do\u011frudan eri\u015fimini sa\u011flar, ancak genellikle ka\u00e7\u0131n\u0131lmas\u0131 gereken bir y\u00f6ntemdir \u00e7\u00fcnk\u00fc bile\u015fenler aras\u0131ndaki ba\u011f\u0131ml\u0131l\u0131\u011f\u0131 art\u0131r\u0131r.<\/p>\n<p>Bu makalede odak noktam\u0131z, alt bile\u015fenlerin \u00fcst bile\u015fenlere nas\u0131l bilgi aktard\u0131\u011f\u0131d\u0131r: <code>@Output<\/code> ve <code>EventEmitter<\/code> kullanarak yukar\u0131 ak\u0131\u015fl\u0131 ileti\u015fim. Bu mekanizma, bile\u015fenler aras\u0131nda g\u00fc\u00e7l\u00fc bir ayr\u0131m (decoupling) sa\u011flar ve bile\u015fenlerin yeniden kullan\u0131labilirli\u011fini art\u0131r\u0131r.<\/p>\n<h3><code>@Output<\/code> ve <code>EventEmitter<\/code>&#8216;\u0131n Temelleri<\/h3>\n<p>Alt bile\u015fenlerin \u00fcst bile\u015fenlere olay veya veri g\u00f6ndermesini sa\u011flayan Angular mekanizmas\u0131, <code>@Output<\/code> dekorat\u00f6r\u00fc ve <code>EventEmitter<\/code> s\u0131n\u0131f\u0131n\u0131n birle\u015fimidir.<\/p>\n<h4><code>EventEmitter<\/code> S\u0131n\u0131f\u0131<\/h4>\n<p><code>EventEmitter<\/code>, Angular&#8217;\u0131n <code>@angular\/core<\/code> mod\u00fcl\u00fcnden gelen \u00f6zel bir s\u0131n\u0131ft\u0131r. Ad\u0131ndan da anla\u015f\u0131laca\u011f\u0131 gibi, olaylar\u0131 yaymak (emit etmek) i\u00e7in kullan\u0131l\u0131r. Bir <code>EventEmitter<\/code> nesnesi, bir olay meydana geldi\u011finde dinleyicilere bildirim g\u00f6nderen bir yay\u0131nc\u0131 gibi \u00e7al\u0131\u015f\u0131r. <code>EventEmitter<\/code>, asl\u0131nda RxJS k\u00fct\u00fcphanesindeki <code>Subject<\/code> s\u0131n\u0131f\u0131n\u0131n Angular&#8217;a \u00f6zel bir t\u00fcrevidir ve RxJS&#8217;in reaktif programlama yeteneklerini kullan\u0131r.<\/p>\n<p><code>EventEmitter<\/code>&#8216;\u0131 kullan\u0131rken genellikle bir jenerik tip (generic type) belirtiriz. Bu, yay\u0131lan verinin tipini tan\u0131mlamam\u0131z\u0131 sa\u011flar ve tip g\u00fcvenli\u011fini art\u0131r\u0131r. \u00d6rne\u011fin, <code>EventEmitter<string><\/code>, sadece string tipinde verilerin yay\u0131labilece\u011fini belirtir. <code>EventEmitter<void><\/code> ise, sadece bir olay\u0131n meydana geldi\u011fini bildiren, ancak herhangi bir veri ta\u015f\u0131mayan bir <code>EventEmitter<\/code> anlam\u0131na gelir.<\/p>\n<p>Bir <code>EventEmitter<\/code>&#8216;\u0131n temel metodu <code>emit()<\/code>&#8216;tir. Bu metod, <code>EventEmitter<\/code> nesnesinin dinleyicilerine bir olay g\u00f6nderir ve iste\u011fe ba\u011fl\u0131 olarak bu olayla birlikte veri ta\u015f\u0131yabilir.<\/p>\n<h4><code>@Output<\/code> Dekorat\u00f6r\u00fc<\/h4>\n<p><code>@Output<\/code> dekorat\u00f6r\u00fc, bir bile\u015fenin belirli bir olay yay\u0131c\u0131s\u0131n\u0131 (EventEmitter) d\u0131\u015f d\u00fcnyaya, yani \u00fcst bile\u015fenlerine a\u00e7\u0131k hale getirdi\u011fini belirtir. Bir bile\u015fen s\u0131n\u0131f\u0131n\u0131n bir \u00f6zelli\u011fine <code>@Output<\/code> uyguland\u0131\u011f\u0131nda, bu \u00f6zellik, \u00fcst bile\u015fenin HTML \u015fablonunda bir olay ba\u011flama hedefi olarak kullan\u0131labilir hale gelir.<\/p>\n<p>S\u00f6zdizimi \u015fu \u015fekildedir:<\/p>\n<pre><code class=\"language-typescript\">import { Component, Output, EventEmitter } from '@angular\/core';\n\n@Component({\n  selector: 'app-alt-bile\u015fen',\n  template: <code>\n    <button (click)=\"tiklamaOlayi()\">Bana T\u0131kla<\/button>\n  <\/code>\n})\nexport class AltBilesenComponent {\n  @Output() tiklandi = new EventEmitter<string>(); \/\/ string tipinde veri yayacak\n\n  tiklamaOlayi() {\n    this.tiklandi.emit('Merhaba \u00fcst bile\u015fen!'); \/\/ Olay\u0131 veriyle birlikte yay\n  }\n}<\/code><\/pre>\n<p>Yukar\u0131daki \u00f6rnekte:<br \/>\n*   <code>@Output() tiklandi<\/code>: <code>tiklandi<\/code> adl\u0131 bir <code>EventEmitter<\/code> \u00f6zelli\u011fi tan\u0131mlanm\u0131\u015ft\u0131r. <code>@Output<\/code> dekorat\u00f6r\u00fc, bu \u00f6zelli\u011fin bir \u00e7\u0131kt\u0131 olay\u0131 oldu\u011funu belirtir.<br \/>\n*   <code>new EventEmitter<string>()<\/code>: <code>tiklandi<\/code> bir <code>EventEmitter<\/code> nesnesi olarak ba\u015flat\u0131l\u0131r ve string tipinde veri yayaca\u011f\u0131 belirtilir.<br \/>\n*   <code>this.tiklandi.emit('Merhaba \u00fcst bile\u015fen!')<\/code>: <code>tiklamaOlayi<\/code> metodu \u00e7a\u011fr\u0131ld\u0131\u011f\u0131nda, <code>tiklandi<\/code> <code>EventEmitter<\/code>&#8216;\u0131 bir string veriyle birlikte bir olay yayar.<\/p>\n<h3>Ad\u0131m Ad\u0131m Uygulama: Alt Bile\u015fenden \u00dcst Bile\u015fene Veri \u0130letimi<\/h3>\n<p>\u015eimdi, <code>@Output<\/code> ve <code>EventEmitter<\/code> kullanarak ger\u00e7ek bir ileti\u015fim senaryosunu ad\u0131m ad\u0131m inceleyelim. Bir alt bile\u015fenimiz olsun, bu bile\u015fen bir say\u0131 se\u00e7imi yaps\u0131n ve se\u00e7ilen say\u0131y\u0131 \u00fcst bile\u015fene bildirsin.<\/p>\n<h4>1. Alt Bile\u015feni Olu\u015fturma (<code>sayi-secici.component.ts<\/code>)<\/h4>\n<p>\u00d6ncelikle, say\u0131y\u0131 se\u00e7ecek olan alt bile\u015fenimizi olu\u015ftural\u0131m.<\/p>\n<pre><code class=\"language-typescript\">\/\/ sayi-secici.component.ts\nimport { Component, Output, EventEmitter } from '@angular\/core';\n\n@Component({\n  selector: 'app-sayi-secici',\n  template: <code>\n    <div>\n      <p>Bir say\u0131 se\u00e7in:<\/p>\n      <button (click)=\"secilenSayi(1)\">1<\/button>\n      <button (click)=\"secilenSayi(2)\">2<\/button>\n      <button (click)=\"secilenSayi(3)\">3<\/button>\n      <button (click)=\"secilenSayi(4)\">4<\/button>\n      <button (click)=\"secilenSayi(5)\">5<\/button>\n    <\/div>\n  <\/code>,\n  styles: [<code>\n    div { border: 1px solid #ccc; padding: 15px; margin: 10px; background-color: #f9f9f9; }\n    button { margin: 5px; padding: 10px 15px; cursor: pointer; background-color: #007bff; color: white; border: none; border-radius: 4px; }\n    button:hover { background-color: #0056b3; }\n  <\/code>]\n})\nexport class SayiSeciciComponent {\n  \/\/ @Output dekorat\u00f6r\u00fc ile bir EventEmitter tan\u0131ml\u0131yoruz.\n  \/\/ Bu EventEmitter, bir say\u0131 (number) yayacak.\n  @Output() sayiSecildi = new EventEmitter<number>();\n\n  \/\/ Kullan\u0131c\u0131 bir d\u00fc\u011fmeye t\u0131klad\u0131\u011f\u0131nda bu metot \u00e7a\u011fr\u0131l\u0131r.\n  \/\/ Se\u00e7ilen say\u0131y\u0131 EventEmitter arac\u0131l\u0131\u011f\u0131yla \u00fcst bile\u015fene yayar.\n  secilenSayi(sayi: number) {\n    console.log(<code>Alt bile\u015fen: ${sayi} se\u00e7ildi.<\/code>);\n    this.sayiSecildi.emit(sayi); \/\/ sayiSecildi olay\u0131n\u0131 tetikle ve se\u00e7ilen say\u0131y\u0131 g\u00f6nder\n  }\n}<\/code><\/pre>\n<p>Bu bile\u015fende:<br \/>\n*   <code>@Output() sayiSecildi = new EventEmitter<number>();<\/code>: <code>sayiSecildi<\/code> ad\u0131nda bir \u00e7\u0131kt\u0131 olay\u0131 tan\u0131mlanm\u0131\u015ft\u0131r. Bu olay, bir <code>number<\/code> tipi veri ta\u015f\u0131yacakt\u0131r.<br \/>\n*   <code>secilenSayi(sayi: number)<\/code> metodu: Kullan\u0131c\u0131 bir d\u00fc\u011fmeye t\u0131klad\u0131\u011f\u0131nda \u00e7a\u011fr\u0131l\u0131r. <code>this.sayiSecildi.emit(sayi);<\/code> sat\u0131r\u0131, se\u00e7ilen say\u0131y\u0131 <code>sayiSecildi<\/code> olay\u0131 arac\u0131l\u0131\u011f\u0131yla \u00fcst bile\u015fene g\u00f6nderir.<\/p>\n<h4>2. \u00dcst Bile\u015feni Olu\u015fturma (<code>app.component.ts<\/code>)<\/h4>\n<p>\u015eimdi, <code>SayiSeciciComponent<\/code>&#8216;i kullanacak ve onun yayd\u0131\u011f\u0131 olaylar\u0131 dinleyecek olan \u00fcst bile\u015fenimizi olu\u015ftural\u0131m.<\/p>\n<pre><code class=\"language-typescript\">\/\/ app.component.ts\nimport { Component } from '@angular\/core';\n\n@Component({\n  selector: 'app-root',\n  template: <code>\n    \n    <div class=\"parent-container\">\n      <h2>\u00dcst Bile\u015fen<\/h2>\n      <p>Alt bile\u015fenden gelen son se\u00e7ilen say\u0131: <strong>{{ sonSecilenSayi }}<\/strong><\/p>\n\n      <!-- Alt bile\u015feni kullan\u0131yoruz ve onun 'sayiSecildi' olay\u0131n\u0131 dinliyoruz -->\n      <!-- '$event' anahtar kelimesi, EventEmitter taraf\u0131ndan yay\u0131lan veriyi temsil eder -->\n      <app-sayi-secici (sayiSecildi)=\"sayiSeciminiIsle($event)\"><\/app-sayi-secici>\n    <\/div>\n  <\/code>,\n  styles: [<code>\n    .parent-container { border: 2px solid #007bff; padding: 20px; margin: 20px; background-color: #e6f2ff; }\n    h1, h2 { color: #333; }\n    strong { color: #d9534f; }\n  <\/code>]\n})\nexport class AppComponent {\n  sonSecilenSayi: number | null = null;\n\n  \/\/ Alt bile\u015fenden gelen 'sayiSecildi' olay\u0131n\u0131 i\u015fleyecek metot\n  sayiSeciminiIsle(secilenSayi: number) {\n    this.sonSecilenSayi = secilenSayi;\n    console.log(<code>\u00dcst bile\u015fen: ${secilenSayi} alt bile\u015fenden al\u0131nd\u0131.<\/code>);\n  }\n}<\/code><\/pre>\n<p>Bu \u00fcst bile\u015fende:<br \/>\n*   <code><app-sayi-secici (sayiSecildi)=\"sayiSeciminiIsle($event)\"><\/app-sayi-secici><\/code>: Bu sat\u0131r, <code>SayiSeciciComponent<\/code>&#8216;i \u015fablona ekler. <code>(sayiSecildi)<\/code> k\u0131sm\u0131, alt bile\u015fenin <code>sayiSecildi<\/code> adl\u0131 \u00e7\u0131kt\u0131s\u0131n\u0131 dinledi\u011fimizi belirtir.<br \/>\n*   <code>\"sayiSeciminiIsle($event)\"<\/code>: Alt bile\u015fen bir <code>sayiSecildi<\/code> olay\u0131 yayd\u0131\u011f\u0131nda, \u00fcst bile\u015fenin <code>sayiSeciminiIsle<\/code> metodu \u00e7a\u011fr\u0131l\u0131r. <code>$event<\/code> \u00f6zel anahtar kelimesi, <code>EventEmitter<\/code> taraf\u0131ndan yay\u0131lan veriyi (bu durumda se\u00e7ilen say\u0131y\u0131) temsil eder.<br \/>\n*   <code>sayiSeciminiIsle(secilenSayi: number)<\/code> metodu: Alt bile\u015fenden gelen say\u0131y\u0131 al\u0131r ve <code>sonSecilenSayi<\/code> \u00f6zelli\u011fine atar, b\u00f6ylece \u015fablonda g\u00f6r\u00fcnt\u00fclenebilir.<\/p>\n<h4>3. Mod\u00fcl\u00fc G\u00fcncelleme (<code>app.module.ts<\/code>)<\/h4>\n<p>Yeni olu\u015fturdu\u011fumuz <code>SayiSeciciComponent<\/code>&#8216;i ana mod\u00fcl\u00fcm\u00fcze (veya ilgili mod\u00fcle) bildirmeyi unutmamal\u0131y\u0131z.<\/p>\n<pre><code class=\"language-typescript\">\/\/ app.module.ts\nimport { NgModule } from '@angular\/core';\nimport { BrowserModule } from '@angular\/platform-browser';\n\nimport { AppComponent } from '.\/app.component';\nimport { SayiSeciciComponent } from '.\/sayi-secici.component'; \/\/ Alt bile\u015feni import et\n\n@NgModule({\n  declarations: [\n    AppComponent,\n    SayiSeciciComponent \/\/ Alt bile\u015feni declarations dizisine ekle\n  ],\n  imports: [\n    BrowserModule\n  ],\n  providers: [],\n  bootstrap: [AppComponent]\n})\nexport class AppModule { }<\/code><\/pre>\n<p>Bu ad\u0131mlar\u0131 tamamlad\u0131\u011f\u0131n\u0131zda, taray\u0131c\u0131n\u0131zda <code>SayiSeciciComponent<\/code>&#8216;in d\u00fc\u011fmelerine t\u0131klad\u0131\u011f\u0131n\u0131zda, se\u00e7ilen say\u0131n\u0131n <code>AppComponent<\/code> taraf\u0131ndan al\u0131nd\u0131\u011f\u0131n\u0131 ve ekranda g\u00f6r\u00fcnt\u00fclendi\u011fini g\u00f6receksiniz. Konsol \u00e7\u0131kt\u0131lar\u0131 da ileti\u015fimin nas\u0131l ger\u00e7ekle\u015fti\u011fini g\u00f6sterecektir.<\/p>\n<h3>Pratik Uygulama ve Senaryolar<\/h3>\n<p><code>@Output<\/code> ve <code>EventEmitter<\/code>, Angular uygulamalar\u0131nda \u00e7ok \u00e7e\u015fitli senaryolarda kullan\u0131l\u0131r:<\/p>\n<h4>Kullan\u0131c\u0131 Etkile\u015fimlerini Yakalama<\/h4>\n<p>En yayg\u0131n kullan\u0131m alan\u0131, alt bile\u015fendeki kullan\u0131c\u0131 etkile\u015fimlerini (d\u00fc\u011fme t\u0131klamalar\u0131, form g\u00f6nderimleri, onay kutusu de\u011fi\u015fiklikleri vb.) \u00fcst bile\u015fene bildirmektir.<br \/>\n*   <strong>\u00d6rnek:<\/strong> Bir <code>TodoItemComponent<\/code>&#8216;te bir g\u00f6revin &#8220;tamamland\u0131&#8221; olarak i\u015faretlenmesi, <code>onCompleted<\/code> olay\u0131yla <code>TodoListComponent<\/code>&#8216;e bildirilebilir.<\/p>\n<h4>Veri G\u00fcncellemelerini Bildirme<\/h4>\n<p>Alt bile\u015fen, kendi i\u00e7 durumunda bir de\u011fi\u015fiklik oldu\u011funda bu de\u011fi\u015fikli\u011fi \u00fcst bile\u015fene bildirebilir.<br \/>\n*   <strong>\u00d6rnek:<\/strong> Bir <code>UserProfileEditorComponent<\/code>&#8216;teki form, kullan\u0131c\u0131 profili verileri g\u00fcncellendi\u011finde <code>profileUpdated<\/code> olay\u0131yla g\u00fcncel veriyi <code>UserDashboardComponent<\/code>&#8216;e g\u00f6nderebilir.<\/p>\n<h4>\u00d6zel Olaylar ve Veri Ta\u015f\u0131ma<\/h4>\n<p><code>EventEmitter<\/code> ile yaln\u0131zca basit de\u011ferler de\u011fil, karma\u015f\u0131k nesneler de ta\u015f\u0131nabilir.<br \/>\n*   <strong>\u00d6rnek:<\/strong> Bir <code>ProductCardComponent<\/code>&#8216;teki &#8220;Sepete Ekle&#8221; d\u00fc\u011fmesi, <code>itemAddedToCart<\/code> olay\u0131yla <code>Product<\/code> nesnesini veya sadece \u00fcr\u00fcn\u00fcn ID&#8217;sini <code>CartComponent<\/code>&#8216;e g\u00f6nderebilir.<\/p>\n<pre><code class=\"language-typescript\">\/\/ product-card.component.ts\nimport { Component, Input, Output, EventEmitter } from '@angular\/core';\n\ninterface Product {\n  id: number;\n  name: string;\n  price: number;\n}\n\n@Component({\n  selector: 'app-product-card',\n  template: <code>\n    <div class=\"product-card\">\n      <h3>{{ product.name }}<\/h3>\n      <p>Fiyat: {{ product.price | currency:'USD':'symbol':'1.2-2' }}<\/p>\n      <button (click)=\"addToCart()\">Sepete Ekle<\/button>\n    <\/div>\n  <\/code>,\n  styles: [<code>\n    .product-card { border: 1px solid #ddd; padding: 15px; margin: 10px; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.1); }\n    button { background-color: #28a745; color: white; border: none; padding: 8px 12px; border-radius: 4px; cursor: pointer; }\n  <\/code>]\n})\nexport class ProductCardComponent {\n  @Input() product!: Product; \/\/ \u00dcstten \u00fcr\u00fcn bilgisi al\u0131yoruz\n  @Output() productAdded = new EventEmitter<Product>(); \/\/ \u00dcr\u00fcn nesnesini yayaca\u011f\u0131z\n\n  addToCart() {\n    this.productAdded.emit(this.product); \/\/ T\u00fcm \u00fcr\u00fcn nesnesini \u00fcst bile\u015fene g\u00f6nder\n    console.log(<code>${this.product.name} sepete eklendi.<\/code>);\n  }\n}<\/code><\/pre>\n<pre><code class=\"language-typescript\">\/\/ app.component.ts (\u00fcst bile\u015fen)\n\/\/ ...\nexport class AppComponent {\n  products: Product[] = [\n    { id: 1, name: 'Laptop', price: 1200 },\n    { id: 2, name: 'Mouse', price: 25 },\n    { id: 3, name: 'Keyboard', price: 75 }\n  ];\n  cartItems: Product[] = [];\n\n  onProductAddedToCart(product: Product) {\n    this.cartItems.push(product);\n    console.log(<code>Sepete eklenen \u00fcr\u00fcn: ${product.name}. Sepetinizde ${this.cartItems.length} \u00fcr\u00fcn var.<\/code>);\n  }\n}<\/code><\/pre>\n<pre><code class=\"language-html\"><!-- app.component.html -->\n<!-- ... -->\n<div class=\"product-list\">\n  <app-product-card *ngFor=\"let p of products\" [product]=\"p\" (productAdded)=\"onProductAddedToCart($event)\"><\/app-product-card>\n<\/div>\n<div class=\"cart-summary\">\n  <h3>Sepetiniz<\/h3>\n  <p *ngIf=\"cartItems.length === 0\">Sepetiniz bo\u015f.<\/p>\n  <ul>\n    <li *ngFor=\"let item of cartItems\">{{ item.name }}<\/li>\n  <\/ul>\n<\/div><\/code><\/pre>\n<p>Bu \u00f6rnekte, <code>ProductCardComponent<\/code> bir <code>Product<\/code> nesnesini <code>@Input<\/code> olarak al\u0131r ve kullan\u0131c\u0131 &#8220;Sepete Ekle&#8221; d\u00fc\u011fmesine t\u0131klad\u0131\u011f\u0131nda, <code>productAdded<\/code> olay\u0131 arac\u0131l\u0131\u011f\u0131yla <em>t\u00fcm<\/em> <code>Product<\/code> nesnesini \u00fcst bile\u015fene geri g\u00f6nderir. Bu, karma\u015f\u0131k veri yap\u0131lar\u0131n\u0131 bile bile\u015fenler aras\u0131nda kolayca ta\u015f\u0131yabilece\u011finizi g\u00f6sterir.<\/p>\n<h3>\u0130leri Seviye Konular ve En \u0130yi Uygulamalar<\/h3>\n<h4><code>EventEmitter<\/code> ile Tip G\u00fcvenli\u011fi<\/h4>\n<p>Daha \u00f6nce de belirtildi\u011fi gibi, <code>EventEmitter<\/code>&#8216;\u0131 jenerik tiplerle kullanmak, yay\u0131lan verinin tipini a\u00e7\u0131k\u00e7a belirtmenizi sa\u011flar. Bu, geli\u015ftirme s\u0131ras\u0131nda hatalar\u0131 yakalaman\u0131za yard\u0131mc\u0131 olur ve kodunuzun daha okunabilir ve s\u00fcrd\u00fcr\u00fclebilir olmas\u0131n\u0131 sa\u011flar.<\/p>\n<pre><code class=\"language-typescript\">\/\/ Do\u011fru kullan\u0131m: Tip belirtildi\n@Output() kullaniciKaydedildi = new EventEmitter<{ id: number; ad: string; email: string }>();\n\n\/\/ K\u00f6t\u00fc kullan\u0131m: Tip belirtilmedi (any olarak kabul edilir)\n@Output() kullaniciKaydedildiKotu = new EventEmitter();<\/code><\/pre>\n<p>Jenerik tipler kullanmak, \u00fcst bile\u015fenin olay i\u015fleyicisinde <code>($event)<\/code> ile gelen verinin hangi tipte oldu\u011funu bilmesini sa\u011flar ve IDE&#8217;lerin otomatik tamamlama \u00f6zelliklerini kullanmas\u0131na olanak tan\u0131r.<\/p>\n<h4><code>@Output<\/code> Aliasing (Takma Ad Kullan\u0131m\u0131)<\/h4>\n<p>Bazen, alt bile\u015fendeki bir <code>EventEmitter<\/code>&#8216;\u0131n ad\u0131n\u0131, onu kullanan \u00fcst bile\u015fendeki olay ad\u0131ndan farkl\u0131 yapmak isteyebilirsiniz. Bu, HTML standart olay adlar\u0131yla \u00e7ak\u0131\u015fmalar\u0131 \u00f6nlemek veya daha a\u00e7\u0131klay\u0131c\u0131 bir ad kullanmak i\u00e7in faydal\u0131 olabilir. <code>@Output<\/code> dekorat\u00f6r\u00fcne bir string arg\u00fcman ge\u00e7irerek takma ad (alias) belirleyebilirsiniz:<\/p>\n<pre><code class=\"language-typescript\">\/\/ alt-bilesen.component.ts\n@Output('kullaniciGuncelleme') userUpdate = new EventEmitter<User>();\n\n\/\/ \u00dcst bile\u015fende kullan\u0131m:\n\/\/ <app-alt-bilesen (kullaniciGuncelleme)=\"handleUserUpdate($event)\"><\/app-alt-bilesen><\/code><\/pre>\n<p>Bu durumda, alt bile\u015fendeki <code>userUpdate<\/code> \u00f6zelli\u011fi, \u00fcst bile\u015fende <code>kullaniciGuncelleme<\/code> ad\u0131yla dinlenir.<\/p>\n<h4><code>@Output<\/code> Kullan\u0131m\u0131nda Dikkat Edilmesi Gerekenler<\/h4>\n<p>*   <strong>Adland\u0131rma Kurallar\u0131:<\/strong> Angular toplulu\u011funda, \u00e7\u0131kt\u0131 olaylar\u0131n\u0131 adland\u0131r\u0131rken <code>on<\/code> \u00f6n eki kullanmak veya <code>Input<\/code>&#8216;un ad\u0131n\u0131n sonuna <code>Change<\/code> eklemek gibi yayg\u0131n kurallar vard\u0131r. \u00d6rne\u011fin, bir <code>value<\/code> <code>Input<\/code>&#8216;u olan bir bile\u015fen, <code>valueChange<\/code> \u00e7\u0131kt\u0131s\u0131 yayabilir. Bu, \u00e7ift y\u00f6nl\u00fc veri ba\u011flama (<code>[(ngModel)]<\/code> gibi) i\u00e7in \u00f6nemlidir. \u00d6zel olaylar i\u00e7in <code>on<\/code> \u00f6n eki (\u00f6rne\u011fin <code>onSelected<\/code>, <code>onSubmitted<\/code>) veya do\u011frudan olay\u0131 tan\u0131mlayan bir isim (\u00f6rne\u011fin <code>itemAdded<\/code>) tercih edilebilir.<br \/>\n*   <strong>Gereksiz Kullan\u0131mdan Ka\u00e7\u0131nma:<\/strong> <code>@Output<\/code> ve <code>EventEmitter<\/code> g\u00fc\u00e7l\u00fcd\u00fcr, ancak her ileti\u015fim senaryosu i\u00e7in uygun de\u011fildir. Derinlemesine i\u00e7 i\u00e7e ge\u00e7mi\u015f bile\u015fenler aras\u0131nda ileti\u015fim kurmak veya uygulaman\u0131n genel durumunu y\u00f6netmek i\u00e7in <code>@Output<\/code> kullanmak, karma\u015f\u0131k ve y\u00f6netilmesi zor bir yap\u0131ya yol a\u00e7abilir (&#8220;prop drilling&#8221; veya &#8220;event bubbling&#8221; olarak bilinir). Bu t\u00fcr senaryolarda servisler veya durum y\u00f6netimi k\u00fct\u00fcphaneleri (NgRx, Akita vb.) daha iyi \u00e7\u00f6z\u00fcmler sunar.<br \/>\n*   <strong>Tek Y\u00f6nl\u00fc Ak\u0131\u015f Felsefesi:<\/strong> Angular, veri ak\u0131\u015f\u0131n\u0131 genellikle tek y\u00f6nl\u00fc (\u00fcstten alta <code>@Input<\/code>, alttan \u00fcste <code>@Output<\/code>) te\u015fvik eder. Bu, uygulaman\u0131n veri ak\u0131\u015f\u0131n\u0131 anlamay\u0131 ve hata ay\u0131klamay\u0131 kolayla\u015ft\u0131r\u0131r.<\/p>\n<h4>Alternatif \u0130leti\u015fim Y\u00f6ntemleri ve Kar\u015f\u0131la\u015ft\u0131rma<\/h4>\n<p><code>@Output<\/code> ve <code>EventEmitter<\/code>&#8216;\u0131n g\u00fcc\u00fcn\u00fc anlamak i\u00e7in di\u011fer ileti\u015fim y\u00f6ntemleriyle kar\u015f\u0131la\u015ft\u0131rmak faydal\u0131d\u0131r.<\/p>\n<h5><code>@Input<\/code> ile A\u015fa\u011f\u0131 Ak\u0131\u015fl\u0131 \u0130leti\u015fim<\/h5>\n<p>*   <strong>Y\u00f6n:<\/strong> \u00dcst bile\u015fenden alt bile\u015fene.<br \/>\n*   <strong>Kullan\u0131m:<\/strong> Alt bile\u015fenin yap\u0131land\u0131rma verilerini veya g\u00f6r\u00fcnt\u00fclenecek verileri almas\u0131.<br \/>\n*   <strong>\u00d6rnek:<\/strong> <code><app-urun-detay [urunId]=\"seciliUrunId\"><\/app-urun-detay><\/code><br \/>\n*   <strong>Kar\u015f\u0131la\u015ft\u0131rma:<\/strong> <code>@Input<\/code> veriyi a\u015fa\u011f\u0131 iterken, <code>@Output<\/code> olay\u0131 yukar\u0131 iter. Birbirlerini tamamlarlar.<\/p>\n<h5>Servisler ile Global \u0130leti\u015fim<\/h5>\n<p>*   <strong>Y\u00f6n:<\/strong> Herhangi bir bile\u015fenler aras\u0131nda, genellikle ayn\u0131 seviyede veya hiyerar\u015fide uzak olan bile\u015fenler aras\u0131nda.<br \/>\n*   <strong>Kullan\u0131m:<\/strong> Global durum y\u00f6netimi, veri payla\u015f\u0131m\u0131, asenkron i\u015flemlerin koordinasyonu.<br \/>\n*   <strong>Mekanizma:<\/strong> Ba\u011f\u0131ml\u0131l\u0131k enjeksiyonu ile sa\u011flanan tekil (singleton) servisler, genellikle RxJS <code>Subject<\/code> veya <code>BehaviorSubject<\/code> kullanarak veri ak\u0131\u015f\u0131 sa\u011flarlar.<br \/>\n*   <strong>Kar\u015f\u0131la\u015ft\u0131rma:<\/strong> Servisler, do\u011frudan ebeveyn-\u00e7ocuk ili\u015fkisi olmayan bile\u015fenler i\u00e7in idealdir. <code>@Output<\/code> hiyerar\u015fik ve do\u011frudan ebeveyn-\u00e7ocuk ili\u015fkileri i\u00e7in daha uygundur. Derin i\u00e7 i\u00e7e ge\u00e7mi\u015f bile\u015fenlerde <code>Output<\/code> zinciri yerine servis kullanmak kodu daha temiz tutar.<\/p>\n<h5><code>ViewChild<\/code> \/ <code>ViewChildren<\/code> ile Do\u011frudan Eri\u015fim<\/h5>\n<p>*   <strong>Y\u00f6n:<\/strong> \u00dcst bile\u015fenden alt bile\u015fene do\u011frudan eri\u015fim.<br \/>\n*   <strong>Kullan\u0131m:<\/strong> Nadiren, alt bile\u015fenin metotlar\u0131n\u0131 \u00e7a\u011f\u0131rmak veya \u00f6zelliklerine do\u011frudan eri\u015fmek gerekti\u011finde.<br \/>\n*   <strong>Mekanizma:<\/strong> <code>@ViewChild<\/code> dekorat\u00f6r\u00fc, \u00fcst bile\u015fenin \u015fablonunda tan\u0131mlanm\u0131\u015f bir alt bile\u015fene veya DOM \u00f6\u011fesine referans sa\u011flar.<br \/>\n*   <strong>Kar\u015f\u0131la\u015ft\u0131rma:<\/strong> <code>ViewChild<\/code> bile\u015fenler aras\u0131nda s\u0131k\u0131 bir ba\u011f\u0131ml\u0131l\u0131k (tight coupling) olu\u015fturur. Alt bile\u015fende yap\u0131lan bir de\u011fi\u015fiklik, \u00fcst bile\u015feni etkileyebilir. Bu nedenle, <code>@Input<\/code> ve <code>@Output<\/code> gibi daha gev\u015fek ba\u011fl\u0131 (loosely coupled) y\u00f6ntemler genellikle tercih edilir. <code>ViewChild<\/code> yaln\u0131zca belirli durumlarda (\u00f6rne\u011fin, bir formun <code>reset()<\/code> metodunu \u00e7a\u011f\u0131rmak gibi) kullan\u0131lmal\u0131d\u0131r.<\/p>\n<h3>Performans ve Bellek Y\u00f6netimi<\/h3>\n<p><code>EventEmitter<\/code> asl\u0131nda bir RxJS <code>Subject<\/code> oldu\u011fundan, olay dinleyicilerinin (subscriber&#8217;lar\u0131n) d\u00fczg\u00fcn bir \u015fekilde y\u00f6netilmesi \u00f6nemlidir. Ancak, Angular \u015fablonlar\u0131nda <code>(outputEvent)=\"handler($event)\"<\/code> s\u00f6zdizimi ile olaylara abone oldu\u011funuzda, Angular bu abonelikleri ve abonelikten \u00e7\u0131kma (unsubscribe) i\u015flemlerini otomatik olarak y\u00f6netir. Bile\u015fen yok edildi\u011finde (destroy edildi\u011finde), Angular otomatik olarak t\u00fcm \u015fablon tabanl\u0131 olay dinleyicilerini temizler.<\/p>\n<p>Manuel olarak bir <code>EventEmitter<\/code>&#8216;a abone oldu\u011funuz durumlarda (\u00f6rne\u011fin, bir serviste veya bir <code>ngOnInit<\/code> metodunda <code>output.subscribe(...)<\/code> kullanarak), bellek s\u0131z\u0131nt\u0131lar\u0131n\u0131 \u00f6nlemek i\u00e7in <code>ngOnDestroy<\/code> ya\u015fam d\u00f6ng\u00fcs\u00fc kancas\u0131nda abonelikten manuel olarak \u00e7\u0131kman\u0131z (<code>subscription.unsubscribe()<\/code>) gerekir. Ancak bu, <code>@Output<\/code> dekorat\u00f6r\u00fcyle do\u011frudan \u015fablonda kullan\u0131lan <code>EventEmitter<\/code>&#8216;lar i\u00e7in ge\u00e7erli de\u011fildir.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Angular&#8217;da <code>@Output<\/code> dekorat\u00f6r\u00fc ve <code>EventEmitter<\/code> s\u0131n\u0131f\u0131, alt bile\u015fenlerin \u00fcst bile\u015fenlere olaylar ve veriler g\u00f6ndermesi i\u00e7in temel ve g\u00fc\u00e7l\u00fc bir mekanizma sa\u011flar. Bu &#8220;yukar\u0131 ak\u0131\u015fl\u0131&#8221; ileti\u015fim modeli, bile\u015fenlerinizi daha mod\u00fcler, yeniden kullan\u0131labilir ve bak\u0131m\u0131 kolay hale getirir.<\/p>\n<p>Do\u011fru adland\u0131rma kurallar\u0131na uymak, tip g\u00fcvenli\u011fini sa\u011flamak i\u00e7in jenerik tipler kullanmak ve <code>@Output<\/code>&#8216;u yaln\u0131zca do\u011frudan ebeveyn-\u00e7ocuk ili\u015fkisi olan bile\u015fenler aras\u0131nda kullanmak, en iyi uygulamalard\u0131r. Daha karma\u015f\u0131k veya hiyerar\u015fide daha uzak bile\u015fenler aras\u0131 ileti\u015fim senaryolar\u0131nda, servisler gibi alternatif y\u00f6ntemleri de\u011ferlendirmek, uygulaman\u0131z\u0131n mimarisini daha sa\u011flam ve s\u00fcrd\u00fcr\u00fclebilir k\u0131lacakt\u0131r.<\/p>\n<p>Angular&#8217;\u0131n sundu\u011fu bu ileti\u015fim ara\u00e7lar\u0131n\u0131 ustaca kullanarak, karma\u015f\u0131k kullan\u0131c\u0131 aray\u00fczlerini bile\u015fen tabanl\u0131, y\u00f6netilebilir ve esnek bir yap\u0131da in\u015fa edebilirsiniz. <code>@Output<\/code>&#8216;lar, bile\u015fenlerinizin birbirinden ba\u011f\u0131ms\u0131z bir \u015fekilde \u00e7al\u0131\u015fmas\u0131n\u0131 ve yaln\u0131zca gerekli oldu\u011funda birbirleriyle konu\u015fmas\u0131n\u0131 sa\u011flayarak, temiz kod prensiplerini destekler ve geli\u015ftirme s\u00fcrecinizi h\u0131zland\u0131r\u0131r.<br \/>\n<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Angular&#8217;da Bile\u015fen Etkile\u015fimi: \u00c7\u0131kt\u0131lar (Outputs) ile Yukar\u0131 Ak\u0131\u015fl\u0131 Veri \u0130leti\u015fimi\nAngular, modern web uygulamalar\u0131 geli\u015ftirmek i\u00e7in g","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-32777","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&#039;da Bile\u015fen Etkile\u015fimi: \u00c7\u0131kt\u0131lar (Outputs) ile Yukar\u0131 Ak\u0131\u015fl\u0131 Veri \u0130leti\u015fimi - 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\/angularda-bilesen-etkilesimi-ciktilar-outputs-ile-yukari-akisli-veri-iletisimi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Angular&#039;da Bile\u015fen Etkile\u015fimi: \u00c7\u0131kt\u0131lar (Outputs) ile Yukar\u0131 Ak\u0131\u015fl\u0131 Veri \u0130leti\u015fimi\" \/>\n<meta property=\"og:description\" content=\"Angular&#039;da Bile\u015fen Etkile\u015fimi: \u00c7\u0131kt\u0131lar (Outputs) ile Yukar\u0131 Ak\u0131\u015fl\u0131 Veri \u0130leti\u015fimi Angular, modern web uygulamalar\u0131 geli\u015ftirmek i\u00e7in g\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/angularda-bilesen-etkilesimi-ciktilar-outputs-ile-yukari-akisli-veri-iletisimi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-25T18:41:05+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=\"14 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/angularda-bilesen-etkilesimi-ciktilar-outputs-ile-yukari-akisli-veri-iletisimi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/angularda-bilesen-etkilesimi-ciktilar-outputs-ile-yukari-akisli-veri-iletisimi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Angular&#8217;da Bile\u015fen Etkile\u015fimi: \u00c7\u0131kt\u0131lar (Outputs) ile Yukar\u0131 Ak\u0131\u015fl\u0131 Veri \u0130leti\u015fimi\",\"datePublished\":\"2025-10-25T18:41:05+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/angularda-bilesen-etkilesimi-ciktilar-outputs-ile-yukari-akisli-veri-iletisimi\/\"},\"wordCount\":2160,\"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\/angularda-bilesen-etkilesimi-ciktilar-outputs-ile-yukari-akisli-veri-iletisimi\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/angularda-bilesen-etkilesimi-ciktilar-outputs-ile-yukari-akisli-veri-iletisimi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/angularda-bilesen-etkilesimi-ciktilar-outputs-ile-yukari-akisli-veri-iletisimi\/\",\"name\":\"Angular'da Bile\u015fen Etkile\u015fimi: \u00c7\u0131kt\u0131lar (Outputs) ile Yukar\u0131 Ak\u0131\u015fl\u0131 Veri \u0130leti\u015fimi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-25T18:41:05+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/angularda-bilesen-etkilesimi-ciktilar-outputs-ile-yukari-akisli-veri-iletisimi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/angularda-bilesen-etkilesimi-ciktilar-outputs-ile-yukari-akisli-veri-iletisimi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/angularda-bilesen-etkilesimi-ciktilar-outputs-ile-yukari-akisli-veri-iletisimi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Angular&#8217;da Bile\u015fen Etkile\u015fimi: \u00c7\u0131kt\u0131lar (Outputs) ile Yukar\u0131 Ak\u0131\u015fl\u0131 Veri \u0130leti\u015fimi\"}]},{\"@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'da Bile\u015fen Etkile\u015fimi: \u00c7\u0131kt\u0131lar (Outputs) ile Yukar\u0131 Ak\u0131\u015fl\u0131 Veri \u0130leti\u015fimi - 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\/angularda-bilesen-etkilesimi-ciktilar-outputs-ile-yukari-akisli-veri-iletisimi\/","og_locale":"tr_TR","og_type":"article","og_title":"Angular'da Bile\u015fen Etkile\u015fimi: \u00c7\u0131kt\u0131lar (Outputs) ile Yukar\u0131 Ak\u0131\u015fl\u0131 Veri \u0130leti\u015fimi","og_description":"Angular'da Bile\u015fen Etkile\u015fimi: \u00c7\u0131kt\u0131lar (Outputs) ile Yukar\u0131 Ak\u0131\u015fl\u0131 Veri \u0130leti\u015fimi Angular, modern web uygulamalar\u0131 geli\u015ftirmek i\u00e7in g","og_url":"https:\/\/fatihsoysal.com\/blog\/angularda-bilesen-etkilesimi-ciktilar-outputs-ile-yukari-akisli-veri-iletisimi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-25T18:41:05+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"14 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/angularda-bilesen-etkilesimi-ciktilar-outputs-ile-yukari-akisli-veri-iletisimi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/angularda-bilesen-etkilesimi-ciktilar-outputs-ile-yukari-akisli-veri-iletisimi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Angular&#8217;da Bile\u015fen Etkile\u015fimi: \u00c7\u0131kt\u0131lar (Outputs) ile Yukar\u0131 Ak\u0131\u015fl\u0131 Veri \u0130leti\u015fimi","datePublished":"2025-10-25T18:41:05+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/angularda-bilesen-etkilesimi-ciktilar-outputs-ile-yukari-akisli-veri-iletisimi\/"},"wordCount":2160,"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\/angularda-bilesen-etkilesimi-ciktilar-outputs-ile-yukari-akisli-veri-iletisimi\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/angularda-bilesen-etkilesimi-ciktilar-outputs-ile-yukari-akisli-veri-iletisimi\/","url":"https:\/\/fatihsoysal.com\/blog\/angularda-bilesen-etkilesimi-ciktilar-outputs-ile-yukari-akisli-veri-iletisimi\/","name":"Angular'da Bile\u015fen Etkile\u015fimi: \u00c7\u0131kt\u0131lar (Outputs) ile Yukar\u0131 Ak\u0131\u015fl\u0131 Veri \u0130leti\u015fimi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-25T18:41:05+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/angularda-bilesen-etkilesimi-ciktilar-outputs-ile-yukari-akisli-veri-iletisimi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/angularda-bilesen-etkilesimi-ciktilar-outputs-ile-yukari-akisli-veri-iletisimi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/angularda-bilesen-etkilesimi-ciktilar-outputs-ile-yukari-akisli-veri-iletisimi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Angular&#8217;da Bile\u015fen Etkile\u015fimi: \u00c7\u0131kt\u0131lar (Outputs) ile Yukar\u0131 Ak\u0131\u015fl\u0131 Veri \u0130leti\u015fimi"}]},{"@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\/32777","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=32777"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32777\/revisions"}],"predecessor-version":[{"id":32778,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32777\/revisions\/32778"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=32777"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=32777"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=32777"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}