﻿
{"id":25444,"date":"2022-08-15T00:16:52","date_gmt":"2022-08-15T00:16:52","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=25444"},"modified":"2022-08-15T00:16:52","modified_gmt":"2022-08-15T00:16:52","slug":"angular-gelismis-component-yapilanmasi-ng-content","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/angular-gelismis-component-yapilanmasi-ng-content\/","title":{"rendered":"Angular &#8211; Geli\u015fmi\u015f Component Yap\u0131lanmas\u0131 | ng-content"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Bu i\u00e7eri\u011fimizde Angular mimarisinde, component&#8217;lerin html \u015fablonlar\u0131 i\u00e7erisine harici i\u00e7eriklerin y\u00fcklenmesini sa\u011flayan <code>ng-content<\/code> \u00f6zelli\u011fini inceliyor olaca\u011f\u0131z.<\/p>\n<h4 style=\"color:#e83e8c;\">Ne \u00d6\u011frenece\u011fiz?<\/h4>\n<p>Biliyorsunuz ki, component&#8217;ler aras\u0131 ileti\u015fim i\u00e7in <a href=\"https:\/\/www.gencayyildiz.com\/blog\/angularda-input-ve-output-degiskenler-ile-componentler-arasi-iletisim\/\" rel=\"noopener\" target=\"_blank\">@Input ve @Output<\/a> dekorat\u00f6rlerinden istifade edebiliyor ve \u00f6zellikle parent component&#8217;ten child component&#8217;e veri aktarmak i\u00e7in @Input dekorat\u00f6r\u00fcn\u00fc kullanabiliyoruz. Fakat bu dekorat\u00f6rler e\u015fli\u011finde component&#8217;ler aras\u0131 ileti\u015fim sadece verilerle s\u0131n\u0131rl\u0131d\u0131r. Bazen component&#8217;ler aras\u0131 HTML \u00f6\u011feleri i\u00e7eren kodlar payla\u015fmam\u0131z ve edinen component taraf\u0131ndan bu kodlar\u0131 render etmemiz gerekebilir. \u0130\u015fte b\u00f6yle bir durumda <code>ng-content<\/code> \u00f6zelli\u011finden istifade edebiliriz.<\/p>\n<h4 style=\"color:#e83e8c;\">ng-content Nedir?<\/h4>\n<p><code>ng-content<\/code>, html i\u00e7eriklerini parent component&#8217;ten child component&#8217;e ge\u00e7irmemizi ve render etmemizi sa\u011flayan, b\u00f6ylece dinamik bir \u015fekilde harici \u015fablonlar olu\u015fturmam\u0131za imkan tan\u0131yan bir \u00f6zelliktir. \u0130\u015flevsel olarak child component&#8217;in html&#8217;inde istenilen noktay\u0131 ya da noktalar\u0131 i\u015faretlememizi sa\u011flayarak parent&#8217;tan gelecek olan html \u00f6\u011felerini basmam\u0131z\u0131 ve yeniden kullan\u0131labilir bir component olu\u015fturmam\u0131z\u0131 m\u00fcmk\u00fcn k\u0131lmaktad\u0131r. <\/p>\n<p>Misal olarak a\u015fa\u011f\u0131daki component&#8217;i ele al\u0131rsak e\u011fer;<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nimport { Component, OnInit } from '@angular\/core';\r\n\r\n@Component({\r\n  selector: 'app-c1',\r\n  styleUrls: &#x5B;'.\/c1.component.scss'],\r\n  template: `\r\n    &lt;app-c2&gt;Button 1&lt;\/app-c2&gt;\r\n`\r\n})\r\nexport class C1Component implements OnInit {\r\n  constructor() { }\r\n\r\n  ngOnInit(): void {\r\n  }\r\n}\r\n<\/pre>\n<\/div>\n<p>g\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere i\u00e7erisinde <code>&lt;app-c2&gt;...&lt;\/app-c2&gt;<\/code> selector&#8217;\u0131 bar\u0131nd\u0131rmaktad\u0131r ve b\u00f6ylece a\u015fa\u011f\u0131daki component&#8217;i \u00e7a\u011f\u0131rmaktad\u0131r.<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nimport { Component, Input, OnInit } from '@angular\/core';\r\n\r\n@Component({\r\n  selector: 'app-c2',\r\n  styleUrls: &#x5B;'.\/c2.component.scss'],\r\n  template: `\r\n    &lt;div&gt;\r\n      &lt;p&gt;\u00d6rnek Button&lt;\/p&gt;\r\n      &lt;button&gt;\r\n        &lt;ng-content&gt;&lt;\/ng-content&gt;\r\n      &lt;\/button&gt;\r\n    &lt;\/div&gt;\r\n`\r\n})\r\nexport class C2Component implements OnInit {\r\n  constructor() { }\r\n\r\n  ngOnInit(): void {\r\n  }\r\n}\r\n<\/pre>\n<\/div>\n<p>Bu component&#8217;te ise <em><strong>10.<\/strong><\/em> sat\u0131rda <code>&lt;ng-content&gt;&lt;\/ng-content&gt;<\/code> \u00f6zelli\u011fi ile i\u015faretlemede bulunulmu\u015ftur. Parent component&#8217;in selector aras\u0131na koymu\u015f oldu\u011fu &#8216;Button 1&#8217; de\u011feri i\u015fte tam da bu noktaya yerle\u015ftirilecektir.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/08\/Angular-Gelismis-Component-Yapilanmasi-ng-content.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/08\/Angular-Gelismis-Component-Yapilanmasi-ng-content.png\" alt=\"Angular - Geli\u015fmi\u015f Component Yap\u0131lanmas\u0131 | ng-content\" width=\"231\" height=\"103\" class=\"aligncenter size-full wp-image-25452\" \/><\/a>Netice itibariyle yap\u0131lan bu \u00e7al\u0131\u015fman\u0131n \u00e7\u0131kt\u0131s\u0131 yukar\u0131daki gibi olacakt\u0131r.<\/p>\n<h4 style=\"color:#e83e8c;\">Multiple ng-content<\/h4>\n<p><code>ng-content<\/code>, <code>selector<\/code> ile ayr\u0131larak birden fazla olacak \u015fekilde kullan\u0131labilir.<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nimport { Component, Input, OnInit } from '@angular\/core';\r\n\r\n@Component({\r\n  selector: 'app-c2',\r\n  styleUrls: &#x5B;'.\/c2.component.scss'],\r\n  template: `\r\n    &lt;div&gt;\r\n      &lt;p&gt;\u00d6rnek Button&lt;\/p&gt;\r\n      &lt;div class=&quot;header&quot;&gt;\r\n        &lt;ng-content select=&quot;header&quot;&gt;&lt;\/ng-content&gt;\r\n      &lt;\/div&gt;\r\n      &lt;div class=&quot;body&quot;&gt;\r\n        &lt;ng-content select=&quot;body&quot;&gt;&lt;\/ng-content&gt;\r\n      &lt;\/div&gt;\r\n      &lt;div class=&quot;footer&quot;&gt;\r\n        &lt;ng-content select=&quot;footer&quot;&gt;&lt;\/ng-content&gt;\r\n      &lt;\/div&gt;\r\n    &lt;\/div&gt;\r\n`,\r\n  styles: &#x5B;`\r\n    .header{ background-color:green; }\r\n    .body{ background-color:red; }\r\n    .footer{ background-color:blue; }\r\n`\r\n  ]\r\n})\r\nexport class C2Component implements OnInit {\r\n  constructor() { }\r\n\r\n  ngOnInit(): void {\r\n\r\n  }\r\n}\r\n<\/pre>\n<\/div>\n<p>Yukar\u0131daki kod blo\u011funu incelerseniz e\u011fer her biri bir <code>selector<\/code>&#8216;a sahip \u00fc\u00e7 <code>ng-content<\/code> tan\u0131m\u0131 mevcuttur. Bu selector&#8217;lar\u0131 kullanabilmek i\u00e7in a\u015fa\u011f\u0131daki gibi bir i\u015flem ger\u00e7ekle\u015ftirilmelidir.<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nimport { Component, OnInit } from '@angular\/core';\r\n\r\n@Component({\r\n  selector: 'app-c1',\r\n  styleUrls: &#x5B;'.\/c1.component.scss'],\r\n  template: `\r\n    &lt;app-c2&gt;\r\n      &lt;header&gt;Header Content&lt;\/header&gt;\r\n      &lt;body&gt;Body Content&lt;\/body&gt;\r\n      &lt;footer&gt;Footer Content&lt;\/footer&gt;\r\n    &lt;\/app-c2&gt;\r\n`\r\n})\r\nexport class C1Component implements OnInit {\r\n  constructor() { }\r\n\r\n  ngOnInit(): void {\r\n  }\r\n}\r\n<\/pre>\n<\/div>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/08\/Angular-Gelismis-Component-Yapilanmasi-ng-content-1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/08\/Angular-Gelismis-Component-Yapilanmasi-ng-content-1.png\" alt=\"Angular - Geli\u015fmi\u015f Component Yap\u0131lanmas\u0131 | ng-content\" width=\"246\" height=\"115\" class=\"aligncenter size-full wp-image-25457\" \/><\/a>Bu \u00e7al\u0131\u015fman\u0131n neticesi de yukar\u0131daki gibi olacakt\u0131r.<\/p>\n<p>Ya da iste\u011finiz do\u011frultusunda <code>selector<\/code>&#8216;\u0131 a\u015fa\u011f\u0131daki gibi CSS se\u00e7icisi olarak da kullanabilirsiniz.<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nimport { Component, Input, OnInit } from '@angular\/core';\r\n\r\n@Component({\r\n  selector: 'app-c2',\r\n  styleUrls: &#x5B;'.\/c2.component.scss'],\r\n  template: `\r\n    &lt;div&gt;\r\n      &lt;div class=&quot;header&quot;&gt;\r\n        &lt;ng-content select=&quot;.header&quot;&gt;&lt;\/ng-content&gt;\r\n      &lt;\/div&gt;\r\n      &lt;div class=&quot;body&quot;&gt;\r\n        &lt;ng-content select=&quot;.body&quot;&gt;&lt;\/ng-content&gt;\r\n      &lt;\/div&gt;\r\n      &lt;div class=&quot;footer&quot;&gt;\r\n        &lt;ng-content select=&quot;.footer&quot;&gt;&lt;\/ng-content&gt;\r\n      &lt;\/div&gt;\r\n    &lt;\/div&gt;\r\n`,\r\n  styles: &#x5B;`\r\n    .header{ background-color:green; }\r\n    .body{ background-color:red; }\r\n    .footer{ background-color:blue; }\r\n`\r\n  ]\r\n})\r\nexport class C2Component implements OnInit {\r\n  constructor() { }\r\n\r\n  ngOnInit(): void {\r\n\r\n  }\r\n}\r\n<\/pre>\n<\/div>\n<p>Ard\u0131ndan bu css se\u00e7icilerine kar\u015f\u0131l\u0131k a\u015fa\u011f\u0131daki gibi de\u011ferlerini g\u00f6nderebilirsiniz.<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nimport { Component, OnInit } from '@angular\/core';\r\n\r\n@Component({\r\n  selector: 'app-c1',\r\n  styleUrls: &#x5B;'.\/c1.component.scss'],\r\n  template: `\r\n    &lt;app-c2&gt;\r\n      &lt;div class=&quot;header&quot;&gt;\r\n        &lt;h1&gt;Header Content&lt;\/h1&gt;\r\n      &lt;\/div&gt;\r\n      &lt;div class=&quot;body&quot;&gt;\r\n        &lt;h4&gt;Body Content&lt;\/h4&gt;\r\n      &lt;\/div&gt;\r\n      &lt;div class=&quot;footer&quot;&gt;\r\n        &lt;h6&gt;Footer Content&lt;\/h6&gt;\r\n      &lt;\/div&gt;\r\n    &lt;\/app-c2&gt;\r\n`\r\n})\r\nexport class C1Component implements OnInit {\r\n  constructor() { }\r\n\r\n  ngOnInit(): void {\r\n  }\r\n}\r\n<\/pre>\n<\/div>\n<p>Sonu\u00e7;<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/08\/Angular-Gelismis-Component-Yapilanmasi-ng-content-2.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/08\/Angular-Gelismis-Component-Yapilanmasi-ng-content-2.png\" alt=\"Angular - Geli\u015fmi\u015f Component Yap\u0131lanmas\u0131 | ng-content\" width=\"269\" height=\"174\" class=\"aligncenter size-full wp-image-25460\" \/><\/a><br \/>\nSe\u00e7ici taraf\u0131ndan i\u015faretlenmeyen\/belirlenmeyen alanlar\u0131 varsay\u0131lan olarak bir noktaya yans\u0131tabilmek i\u00e7in a\u015fa\u011f\u0131daki gibi davran\u0131\u015f sergilenebilir.<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nimport { Component, Input, OnInit } from '@angular\/core';\r\n\r\n@Component({\r\n  selector: 'app-c2',\r\n  styleUrls: &#x5B;'.\/c2.component.scss'],\r\n  template: `\r\n    &lt;div&gt;\r\n      &lt;div class=&quot;header&quot;&gt;\r\n        &lt;ng-content select=&quot;.header&quot;&gt;&lt;\/ng-content&gt;\r\n      &lt;\/div&gt;\r\n      &lt;div class=&quot;body&quot;&gt;\r\n        &lt;ng-content select=&quot;.body&quot;&gt;&lt;\/ng-content&gt;\r\n      &lt;\/div&gt;\r\n      &lt;div class=&quot;footer&quot;&gt;\r\n        &lt;ng-content select=&quot;.footer&quot;&gt;&lt;\/ng-content&gt;\r\n      &lt;\/div&gt;\r\n      &lt;div&gt;\r\n        &lt;ng-content&gt;&lt;\/ng-content&gt;\r\n      &lt;\/div&gt;\r\n    &lt;\/div&gt;\r\n`,\r\n  styles: &#x5B;`\r\n    .header{ background-color:green; }\r\n    .body{ background-color:red; }\r\n    .footer{ background-color:blue; }\r\n`\r\n  ]\r\n})\r\nexport class C2Component implements OnInit {\r\n  constructor() { }\r\n\r\n  ngOnInit(): void {\r\n\r\n  }\r\n}\r\n<\/pre>\n<\/div>\n<p>Yukar\u0131daki kod blo\u011funu incelerseniz e\u011fer en sonuncu olan <code>ng-content<\/code> etiketi e\u015fle\u015fmeyen i\u00e7erikleri kar\u015f\u0131lamas\u0131 i\u00e7in tan\u0131mlanm\u0131\u015ft\u0131r. Misal olarak;<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nimport { Component, OnInit } from '@angular\/core';\r\n\r\n@Component({\r\n  selector: 'app-c1',\r\n  styleUrls: &#x5B;'.\/c1.component.scss'],\r\n  template: `\r\n    &lt;app-c2&gt;\r\n      &lt;div class=&quot;header&quot;&gt;\r\n        &lt;h1&gt;Header Content&lt;\/h1&gt;\r\n      &lt;\/div&gt;\r\n      &lt;div class=&quot;body&quot;&gt;\r\n        &lt;h4&gt;Body Content&lt;\/h4&gt;\r\n      &lt;\/div&gt;\r\n      &lt;div class=&quot;footer&quot;&gt;\r\n        &lt;h6&gt;Footer Content&lt;\/h6&gt;\r\n      &lt;\/div&gt;\r\n      &lt;div&gt;\r\n        &lt;h6&gt;Diger Content&lt;\/h6&gt;\r\n      &lt;\/div&gt;\r\n    &lt;\/app-c2&gt;\r\n`\r\n})\r\nexport class C1Component implements OnInit {\r\n  constructor() { }\r\n\r\n  ngOnInit(): void {\r\n  }\r\n}\r\n<\/pre>\n<\/div>\n<p>\u015feklinde bir veri geldi\u011finde a\u015fa\u011f\u0131daki gibi bir sonu\u00e7la kar\u015f\u0131la\u015f\u0131lacakt\u0131r.<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/08\/Angular-Gelismis-Component-Yapilanmasi-ng-content-3.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/08\/Angular-Gelismis-Component-Yapilanmasi-ng-content-3.png\" alt=\"Angular - Geli\u015fmi\u015f Component Yap\u0131lanmas\u0131 | ng-content\" width=\"232\" height=\"221\" class=\"aligncenter size-full wp-image-25461\" \/><\/a><\/p>\n<p>\u0130lgilenenlerin faydalanmas\u0131 dile\u011fiyle&#8230;<br \/>\nSonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Merhaba, Bu i\u00e7eri\u011fimizde Angular mimarisinde, component&#8217;lerin html \u015fablonlar\u0131 i\u00e7erisine harici i\u00e7eriklerin y\u00fcklenmesini sa\u011flayan ng-content \u00f6zelli\u011fini inceliyor olaca\u011f\u0131z. Ne \u00d6\u011frenece\u011fiz? Biliyorsunuz ki, component&#8217;ler aras\u0131 ileti\u015fim i\u00e7in @Input ve @Output dekorat\u00f6rlerinden istifade edebiliyor ve \u00f6zellikle parent&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":7400,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2420,4610],"tags":[2156,4644,4643],"class_list":["post-25444","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-angular","category-angular-14","tag-angular","tag-gelismis-component-yapilanmasi","tag-ng-content"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/25444","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=25444"}],"version-history":[{"count":10,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/25444\/revisions"}],"predecessor-version":[{"id":25462,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/25444\/revisions\/25462"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/7400"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=25444"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=25444"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=25444"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}