{"id":40536,"date":"2026-02-27T14:40:55","date_gmt":"2026-02-27T11:40:55","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=40536"},"modified":"2026-02-27T14:40:55","modified_gmt":"2026-02-27T11:40:55","slug":"vue-jste-bilesen-slotlarini-kullanma-kilavuzu","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/vue-jste-bilesen-slotlarini-kullanma-kilavuzu\/","title":{"rendered":"Vue.js&#8217;te Bile\u015fen Slotlar\u0131n\u0131 Kullanma K\u0131lavuzu"},"content":{"rendered":"<p><body><\/p>\n<h2>Vue.js&#8217;te Bile\u015fen Slotlar\u0131n\u0131 Kullanma K\u0131lavuzu<\/h2>\n<p>Vue.js, modern ve reaktif kullan\u0131c\u0131 aray\u00fczleri olu\u015fturmak i\u00e7in pop\u00fcler bir JavaScript \u00e7er\u00e7evesidir. Bile\u015fen tabanl\u0131 mimarisi, kodun yeniden kullan\u0131labilirli\u011fini ve bak\u0131m\u0131n\u0131 kolayla\u015ft\u0131r\u0131rken, bazen bile\u015fenlerimizin i\u00e7eri\u011fini daha dinamik ve esnek bir \u015fekilde y\u00f6netme ihtiyac\u0131 do\u011far. \u0130\u015fte tam bu noktada Vue.js&#8217;in &#8220;slot&#8221; (yuva) \u00f6zelli\u011fi devreye girer. Slotlar, bir bile\u015fenin i\u00e7eri\u011fini, o bile\u015feni kullanan \u00fcst bile\u015fen (parent component) taraf\u0131ndan \u00f6zelle\u015ftirilebilmesine olanak tan\u0131r. Bu makalede, Vue.js&#8217;teki bile\u015fen slotlar\u0131n\u0131n ne oldu\u011funu, neden kullan\u0131ld\u0131\u011f\u0131n\u0131 ve farkl\u0131 t\u00fcrlerini (temel, adland\u0131r\u0131lm\u0131\u015f, kapsaml\u0131) ayr\u0131nt\u0131l\u0131 \u00f6rneklerle ele alaca\u011f\u0131z.<\/p>\n<h3>Slotlar Nedir ve Neden \u0130htiya\u00e7 Duyar\u0131z?<\/h3>\n<p>Vue.js&#8217;te her bile\u015fen, belirli bir i\u015flevselli\u011fi ve g\u00f6r\u00fcn\u00fcm\u00fc kapsayan ba\u011f\u0131ms\u0131z bir birimdir. \u00d6rne\u011fin, bir <code>Button<\/code> bile\u015feni, bir <code>Card<\/code> bile\u015feni veya bir <code>Modal<\/code> bile\u015feni olu\u015fturabilirsiniz. Ancak bazen, bir bile\u015fenin genel yap\u0131s\u0131n\u0131 korurken, i\u00e7indeki baz\u0131 k\u0131s\u0131mlar\u0131n d\u0131\u015far\u0131dan belirlenmesini isteyebiliriz.<\/p>\n<p>Diyelim ki bir <code>Card<\/code> bile\u015feniniz var. Bu kart\u0131n her zaman bir ba\u015fl\u0131\u011f\u0131 ve bir g\u00f6vdesi olmas\u0131n\u0131 istiyorsunuz, ancak g\u00f6vde i\u00e7eri\u011finin veya ba\u015fl\u0131\u011f\u0131n tam olarak ne olaca\u011f\u0131, kart\u0131 kulland\u0131\u011f\u0131n\u0131z yere g\u00f6re de\u011fi\u015febilir. E\u011fer bu i\u00e7eri\u011fi props (\u00f6zellikler) arac\u0131l\u0131\u011f\u0131yla ge\u00e7irmeye \u00e7al\u0131\u015f\u0131rsan\u0131z, k\u0131sa metinler i\u00e7in sorun olmayabilir, ancak daha karma\u015f\u0131k HTML yap\u0131lar\u0131 veya birden fazla farkl\u0131 i\u00e7erik blo\u011fu i\u00e7in props kullanmak hantal ve y\u00f6netilemez hale gelebilir.<\/p>\n<p>\u0130\u015fte bu noktada slotlar devreye girer. Slotlar, bir bile\u015fen i\u00e7inde &#8220;bo\u015fluklar&#8221; veya &#8220;yer tutucular&#8221; tan\u0131mlaman\u0131za olanak tan\u0131r. Bu bo\u015fluklar, bile\u015feni kullanan \u00fcst bile\u015fen taraf\u0131ndan doldurulur. Bu, bile\u015fenlerinizi daha esnek, yeniden kullan\u0131labilir ve \u00f6zelle\u015ftirilebilir hale getirir. Bir bile\u015feni bir ev olarak d\u00fc\u015f\u00fcn\u00fcrseniz, slotlar o evin pencereleri, kap\u0131lar\u0131 veya farkl\u0131 odalar\u0131 gibidir; evin genel yap\u0131s\u0131 sabittir, ancak bu bo\u015fluklar\u0131 istedi\u011finiz gibi doldurabilirsiniz.<\/p>\n<p>Slotlar, bile\u015fenlerin sorumluluklar\u0131n\u0131 ay\u0131rman\u0131n (separation of concerns) harika bir yoludur:<br \/>\n*   <strong>Child Component (\u00c7ocuk Bile\u015fen):<\/strong> Bile\u015fenin genel yap\u0131s\u0131n\u0131, d\u00fczenini ve stilini tan\u0131mlar. \u0130\u00e7erik i\u00e7in yer tutucular\u0131 (<code><slot><\/code>) sa\u011flar.<br \/>\n*   <strong>Parent Component (\u00dcst Bile\u015fen):<\/strong> \u00c7ocuk bile\u015feni kullan\u0131r ve slot yer tutucular\u0131na hangi i\u00e7eri\u011fin yerle\u015ftirilece\u011fini belirler.<\/p>\n<p>Bu sayede, ayn\u0131 <code>Card<\/code> bile\u015fenini farkl\u0131 i\u00e7eriklerle bir\u00e7ok farkl\u0131 yerde kullanabilir, ancak her bir kart\u0131n g\u00f6r\u00fcn\u00fcm\u00fcn\u00fc ve davran\u0131\u015f\u0131n\u0131 merkezi olarak <code>Card<\/code> bile\u015feninde y\u00f6netebilirsiniz.<\/p>\n<h3>Temel Slotlar (Varsay\u0131lan Slotlar)<\/h3>\n<p>Temel slotlar, bir bile\u015fenin tek bir ana i\u00e7erik blo\u011funu \u00fcst bile\u015fenden almas\u0131 gereken durumlarda kullan\u0131l\u0131r. Bunlara &#8220;varsay\u0131lan slotlar&#8221; veya &#8220;isimsiz slotlar&#8221; da denir \u00e7\u00fcnk\u00fc belirli bir isimleri yoktur.<\/p>\n<h4>Kullan\u0131m \u015eekli<\/h4>\n<p><strong>1. \u00c7ocuk Bile\u015fende (<code>ChildComponent.vue<\/code>):<\/strong><br \/>\nBir <code><slot><\/code> etiketi ekleyerek, bu etiketin yerine \u00fcst bile\u015fenden gelecek i\u00e7eri\u011fin yerle\u015ftirilece\u011fini belirtirsiniz.<\/p>\n<pre><code class=\"language-vue\"><!-- components\/MyCard.vue -->\n<template>\n  <div class=\"card\">\n    <div class=\"card-header\">\n      <h3>Kart Ba\u015fl\u0131\u011f\u0131<\/h3>\n    <\/div>\n    <div class=\"card-body\">\n      <!-- Buraya \u00fcst bile\u015fenden gelen i\u00e7erik yerle\u015ftirilecek -->\n      <slot><\/slot>\n    <\/div>\n    <div class=\"card-footer\">\n      <small>Kart Alt Bilgisi<\/small>\n    <\/div>\n  <\/div>\n<\/template>\n\n<style scoped>\n.card {\n  border: 1px solid #ccc;\n  border-radius: 8px;\n  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n  margin: 16px;\n  width: 300px;\n}\n.card-header {\n  background-color: #f4f4f4;\n  padding: 12px;\n  border-bottom: 1px solid #eee;\n}\n.card-body {\n  padding: 12px;\n}\n.card-footer {\n  background-color: #f4f4f4;\n  padding: 8px;\n  border-top: 1px solid #eee;\n  font-size: 0.8em;\n  text-align: center;\n}\n<\/style><\/code><\/pre>\n<p><strong>2. \u00dcst Bile\u015fende (<code>ParentComponent.vue<\/code>):<\/strong><br \/>\n\u00c7ocuk bile\u015feni kullan\u0131rken, bile\u015fen etiketlerinin aras\u0131na yerle\u015ftirdi\u011finiz her \u015fey, \u00e7ocuk bile\u015fendeki <code><slot><\/code> etiketinin yerine otomatik olarak render edilir.<\/p>\n<pre><code class=\"language-vue\"><!-- App.vue -->\n<template>\n  <div>\n    <h2>Temel Slot \u00d6rne\u011fi<\/h2>\n    <MyCard>\n      <p>Bu, \u00fcst bile\u015fenden gelen <strong>kart\u0131n ana i\u00e7eri\u011fidir<\/strong>.<\/p>\n      <ul>\n        <li>\u00d6\u011fe 1<\/li>\n        <li>\u00d6\u011fe 2<\/li>\n      <\/ul>\n    <\/MyCard>\n\n    <MyCard>\n      <img decoding=\"async\" src=\"https:\/\/via.placeholder.com\/200x100\" alt=\"Placeholder G\u00f6rseli\">\n      <p>Farkl\u0131 bir kart i\u00e7eri\u011fi.<\/p>\n    <\/MyCard>\n  <\/div>\n<\/template>\n\n<script>\nimport MyCard from '.\/components\/MyCard.vue';\n\nexport default {\n  components: {\n    MyCard\n  }\n}\n<\/script><\/code><\/pre>\n<p>Yukar\u0131daki \u00f6rnekte, <code>MyCard<\/code> bile\u015feni ayn\u0131 yap\u0131y\u0131 korurken, <code>App.vue<\/code> i\u00e7inde farkl\u0131 i\u00e7eriklerle iki kez kullan\u0131lm\u0131\u015ft\u0131r.<\/p>\n<h4>Varsay\u0131lan \u0130\u00e7erik<\/h4>\n<p>Bir slota i\u00e7erik sa\u011flanmad\u0131\u011f\u0131nda g\u00f6sterilecek bir varsay\u0131lan i\u00e7erik tan\u0131mlayabilirsiniz. Bu, <code><slot><\/code> etiketinin i\u00e7ine yerle\u015ftirilen herhangi bir HTML veya metin olabilir.<\/p>\n<pre><code class=\"language-vue\"><!-- components\/MyCard.vue -->\n<template>\n  <div class=\"card\">\n    <div class=\"card-header\">\n      <h3>Kart Ba\u015fl\u0131\u011f\u0131<\/h3>\n    <\/div>\n    <div class=\"card-body\">\n      <slot>\n        <!-- \u00dcst bile\u015fenden i\u00e7erik gelmezse bu g\u00f6sterilecek -->\n        <p>Bu kart i\u00e7in herhangi bir i\u00e7erik sa\u011flanmad\u0131.<\/p>\n      <\/slot>\n    <\/div>\n  <\/div>\n<\/template><\/code><\/pre>\n<p>\u015eimdi <code>MyCard<\/code> bile\u015fenini hi\u00e7bir i\u00e7erik sa\u011flamadan kullan\u0131rsan\u0131z:<\/p>\n<pre><code class=\"language-vue\"><!-- App.vue -->\n<template>\n  <div>\n    <MyCard><\/MyCard> <!-- Varsay\u0131lan i\u00e7erik g\u00f6sterilecek -->\n    <MyCard>\n      <p>Bu i\u00e7erik g\u00f6sterilecek.<\/p>\n    <\/MyCard>\n  <\/div>\n<\/template><\/code><\/pre>\n<p>\u0130lk <code>MyCard<\/code> bile\u015feni &#8220;Bu kart i\u00e7in herhangi bir i\u00e7erik sa\u011flanmad\u0131.&#8221; metnini g\u00f6sterecekken, ikincisi kendi <code><\/p>\n<p><\/code> etiketindeki i\u00e7eri\u011fi g\u00f6sterecektir.<\/p>\n<h3>Adland\u0131r\u0131lm\u0131\u015f Slotlar (Named Slots)<\/h3>\n<p>Bir bile\u015fenin birden fazla farkl\u0131 i\u00e7erik blo\u011funu almas\u0131 gerekti\u011finde adland\u0131r\u0131lm\u0131\u015f slotlar kullan\u0131l\u0131r. \u00d6rne\u011fin, bir <code>Layout<\/code> bile\u015feni bir ba\u015fl\u0131k, bir ana i\u00e7erik ve bir alt bilgi slotuna sahip olabilir.<\/p>\n<h4>Kullan\u0131m \u015eekli<\/h4>\n<p><strong>1. \u00c7ocuk Bile\u015fende (<code>ChildComponent.vue<\/code>):<\/strong><br \/>\n<code><slot><\/code> etiketine bir <code>name<\/code> \u00f6zelli\u011fi eklersiniz. Varsay\u0131lan slot i\u00e7in \u00f6zel bir <code>name<\/code> belirtmeye gerek yoktur, ancak isterseniz <code>name=\"default\"<\/code> kullanabilirsiniz.<\/p>\n<pre><code class=\"language-vue\"><!-- components\/LayoutComponent.vue -->\n<template>\n  <div class=\"layout-container\">\n    <header class=\"layout-header\">\n      <!-- 'header' slotu i\u00e7in yer tutucu -->\n      <slot name=\"header\">\n        \n      <\/slot>\n    <\/header>\n\n    <main class=\"layout-main\">\n      <!-- Varsay\u0131lan slot (isimsiz) i\u00e7in yer tutucu -->\n      <slot>\n        <p>Ana i\u00e7erik burada.<\/p>\n      <\/slot>\n    <\/main>\n\n    <footer class=\"layout-footer\">\n      <!-- 'footer' slotu i\u00e7in yer tutucu -->\n      <slot name=\"footer\">\n        <p>&copy; 2023 Uygulama Ad\u0131<\/p>\n      <\/slot>\n    <\/footer>\n  <\/div>\n<\/template>\n\n<style scoped>\n.layout-container {\n  display: flex;\n  flex-direction: column;\n  min-height: 100vh;\n  font-family: Arial, sans-serif;\n}\n.layout-header {\n  background-color: #333;\n  color: white;\n  padding: 1em;\n  text-align: center;\n}\n.layout-main {\n  flex-grow: 1;\n  padding: 2em;\n  background-color: #f9f9f9;\n}\n.layout-footer {\n  background-color: #eee;\n  padding: 1em;\n  text-align: center;\n  font-size: 0.9em;\n  color: #555;\n}\n<\/style><\/code><\/pre>\n<p>Bu <code>LayoutComponent<\/code>&#8216;te \u00fc\u00e7 slot var: <code>header<\/code> ad\u0131nda bir slot, <code>footer<\/code> ad\u0131nda bir slot ve isimsiz (varsay\u0131lan) bir slot.<\/p>\n<p><strong>2. \u00dcst Bile\u015fende (<code>ParentComponent.vue<\/code>):<\/strong><br \/>\n\u00dcst bile\u015fende, <code><template><\/code> etiketini <code>v-slot<\/code> direktifi ile kullanarak belirli bir slota i\u00e7erik sa\u011flars\u0131n\u0131z. <code>v-slot:<\/code> direktifini takiben slotun ad\u0131n\u0131 belirtirsiniz. Varsay\u0131lan slot i\u00e7in <code>v-slot:default<\/code> kullanabilirsiniz.<\/p>\n<pre><code class=\"language-vue\"><!-- App.vue -->\n<template>\n  <div>\n    <h2>Adland\u0131r\u0131lm\u0131\u015f Slotlar \u00d6rne\u011fi<\/h2>\n    <LayoutComponent>\n      <!-- 'header' slotuna i\u00e7erik sa\u011flama -->\n      <template v-slot:header>\n        <nav>\n          <a href=\"#\">Ana Sayfa<\/a> |\n          <a href=\"#\">Hakk\u0131m\u0131zda<\/a> |\n          <a href=\"#\">\u0130leti\u015fim<\/a>\n        <\/nav>\n      <\/template>\n\n      <!-- Varsay\u0131lan slot'a i\u00e7erik sa\u011flama (v-slot:default veya sadece i\u00e7erik) -->\n      <template v-slot:default>\n        \n        <p>Bu, uygulaman\u0131z\u0131n ana i\u00e7eri\u011fidir. Burada \u00e7e\u015fitli bile\u015fenler, metinler ve g\u00f6rseller yer alabilir.<\/p>\n        <button>Daha Fazla Bilgi<\/button>\n      <\/template>\n\n      <!-- 'footer' slotuna i\u00e7erik sa\u011flama -->\n      <template v-slot:footer>\n        <p>T\u00fcm haklar\u0131 sakl\u0131d\u0131r. <a href=\"#\">Gizlilik Politikas\u0131<\/a><\/p>\n      <\/template>\n    <\/LayoutComponent>\n\n    <hr>\n\n    <h3>Farkl\u0131 \u0130\u00e7erikli Ba\u015fka Bir Layout<\/h3>\n    <LayoutComponent>\n      <template v-slot:header>\n        <h2>Admin Paneli<\/h2>\n      <\/template>\n      <template v-slot:default>\n        <p>Admin paneli i\u00e7eri\u011fi burada yer alacak.<\/p>\n        <ul>\n          <li>Kullan\u0131c\u0131 Y\u00f6netimi<\/li>\n          <li>Ayarlar<\/li>\n        <\/ul>\n      <\/template>\n      <template v-slot:footer>\n        <p>Admin panel s\u00fcr\u00fcm\u00fc v1.0<\/p>\n      <\/template>\n    <\/LayoutComponent>\n  <\/div>\n<\/template>\n\n<script>\nimport LayoutComponent from '.\/components\/LayoutComponent.vue';\n\nexport default {\n  components: {\n    LayoutComponent\n  }\n}\n<\/script><\/code><\/pre>\n<h4><code>v-slot<\/code> K\u0131saltmas\u0131 (<code>#<\/code>)<\/h4>\n<p><code>v-slot:<\/code> direktifi i\u00e7in bir k\u0131saltma mevcuttur: <code>#<\/code>. Bu, \u00f6zellikle adland\u0131r\u0131lm\u0131\u015f slotlar\u0131 s\u0131k\u00e7a kulland\u0131\u011f\u0131n\u0131zda kodunuzu daha k\u0131sa ve okunabilir hale getirir.<\/p>\n<pre><code class=\"language-vue\"><!-- App.vue (k\u0131saltmal\u0131 kullan\u0131m) -->\n<template>\n  <div>\n    <LayoutComponent>\n      <template #header> <!-- v-slot:header yerine #header -->\n        <nav>\n          <a href=\"#\">Ana Sayfa<\/a> |\n          <a href=\"#\">Hakk\u0131m\u0131zda<\/a> |\n          <a href=\"#\">\u0130leti\u015fim<\/a>\n        <\/nav>\n      <\/template>\n\n      <template #default> <!-- v-slot:default yerine #default -->\n        \n        <p>Bu, uygulaman\u0131z\u0131n ana i\u00e7eri\u011fidir.<\/p>\n      <\/template>\n\n      <template #footer> <!-- v-slot:footer yerine #footer -->\n        <p>T\u00fcm haklar\u0131 sakl\u0131d\u0131r. <a href=\"#\">Gizlilik Politikas\u0131<\/a><\/p>\n      <\/template>\n    <\/LayoutComponent>\n  <\/div>\n<\/template><\/code><\/pre>\n<p>Adland\u0131r\u0131lm\u0131\u015f slotlar, bile\u015fenlerinizi daha mod\u00fcler ve esnek hale getirerek, karma\u015f\u0131k d\u00fczenleri kolayca olu\u015fturman\u0131za ve y\u00f6netmenize olanak tan\u0131r.<\/p>\n<h3>Kapsaml\u0131 Slotlar (Scoped Slots)<\/h3>\n<p>Kapsaml\u0131 slotlar, Vue.js&#8217;in en g\u00fc\u00e7l\u00fc slot t\u00fcrlerinden biridir ve bile\u015fen tasar\u0131m\u0131nda \u00e7ok b\u00fcy\u00fck esneklik sa\u011flar. Bazen, bir \u00fcst bile\u015fenin, \u00e7ocuk bile\u015fendeki bir slotun i\u00e7eri\u011fini render ederken, \u00e7ocuk bile\u015fenin kendi verilerine eri\u015fmesi gerekebilir. Normalde, bir slotun i\u00e7eri\u011fi \u00fcst bile\u015fenin kapsam\u0131 i\u00e7inde derlenir, yani \u00e7ocuk bile\u015fenin verilerine do\u011frudan eri\u015femez. Kapsaml\u0131 slotlar bu sorunu \u00e7\u00f6zer.<\/p>\n<h4>Neden Kapsaml\u0131 Slotlara \u0130htiya\u00e7 Duyar\u0131z?<\/h4>\n<p>Diyelim ki bir <code>ItemList<\/code> bile\u015feniniz var. Bu bile\u015fen, bir dizi \u00f6\u011feyi (\u00f6rne\u011fin, kullan\u0131c\u0131lar, \u00fcr\u00fcnler) al\u0131r ve bunlar\u0131 bir liste olarak render eder. <code>ItemList<\/code> bile\u015feni, \u00f6\u011feleri d\u00f6ng\u00fcye sokma mant\u0131\u011f\u0131n\u0131 ve listenin genel yap\u0131s\u0131n\u0131 y\u00f6netir. Ancak, her bir \u00f6\u011fenin <em>nas\u0131l<\/em> g\u00f6r\u00fcnece\u011fi (yani, her bir <code><\/p>\n<li><\/code> i\u00e7indeki i\u00e7erik) uygulaman\u0131n farkl\u0131 yerlerinde farkl\u0131 olabilir.\n<p>E\u011fer <code>ItemList<\/code> bile\u015feni her \u00f6\u011feyi sabit bir \u015fekilde render etseydi (\u00f6rne\u011fin, sadece <code>item.name<\/code> g\u00f6stererek), bu \u00e7ok esnek olmazd\u0131. <code>ItemList<\/code> bile\u015feninin her \u00f6\u011feyi nas\u0131l render edece\u011fine dair karar\u0131 \u00fcst bile\u015fene b\u0131rakmak isteriz. \u0130\u015fte burada kapsaml\u0131 slotlar devreye girer. \u00c7ocuk bile\u015fen, kendi verilerini (\u00f6rne\u011fin, d\u00f6ng\u00fcdeki mevcut \u00f6\u011fe) slota &#8220;ge\u00e7irir&#8221; ve \u00fcst bile\u015fen bu verilere eri\u015ferek slotun i\u00e7eri\u011fini olu\u015fturur.<\/p>\n<h4>Kullan\u0131m \u015eekli<\/h4>\n<p><strong>1. \u00c7ocuk Bile\u015fende (<code>ChildComponent.vue<\/code>):<\/strong><br \/>\n<code><slot><\/code> etiketine <code>v-bind<\/code> (veya k\u0131saltmas\u0131 <code>:<\/code>) ile veri ba\u011flayarak bu verileri \u00fcst bile\u015fene &#8220;g\u00f6nderirsiniz&#8221;. Bu verilere genellikle &#8220;slot props&#8221; denir.<\/p>\n<pre><code class=\"language-vue\"><!-- components\/ItemList.vue -->\n<template>\n  <ul class=\"item-list\">\n    <li v-for=\"item in items\" :key=\"item.id\" class=\"item-list-item\">\n      <!-- item verisini slota ge\u00e7iriyoruz -->\n      <slot :item=\"item\" :index=\"items.indexOf(item)\">\n        <!-- Varsay\u0131lan i\u00e7erik: e\u011fer \u00fcst bile\u015fen slot i\u00e7eri\u011fi sa\u011flamazsa -->\n        {{ item.name }} (ID: {{ item.id }})\n      <\/slot>\n    <\/li>\n  <\/ul>\n<\/template>\n\n<script>\nexport default {\n  props: {\n    items: {\n      type: Array,\n      required: true\n    }\n  }\n}\n<\/script>\n\n<style scoped>\n.item-list {\n  list-style-type: none;\n  padding: 0;\n  margin: 16px;\n  border: 1px solid #eee;\n  border-radius: 8px;\n}\n.item-list-item {\n  padding: 12px;\n  border-bottom: 1px solid #eee;\n}\n.item-list-item:last-child {\n  border-bottom: none;\n}\n<\/style><\/code><\/pre>\n<p>Bu <code>ItemList<\/code> bile\u015feni, <code>items<\/code> prop&#8217;unu al\u0131r ve her bir \u00f6\u011feyi d\u00f6ng\u00fcye sokar. Her d\u00f6ng\u00fcde, mevcut <code>item<\/code> nesnesini ve <code>index<\/code> de\u011ferini varsay\u0131lan slota <code>:item=\"item\"<\/code> ve <code>:index=\"items.indexOf(item)\"<\/code> \u015feklinde ba\u011flar.<\/p>\n<p><strong>2. \u00dcst Bile\u015fende (<code>ParentComponent.vue<\/code>):<\/strong><br \/>\n\u00dcst bile\u015fende, <code>v-slot<\/code> direktifine bir de\u011fer atayarak \u00e7ocuk bile\u015fenden gelen slot props&#8217;lar\u0131n\u0131 yakalars\u0131n\u0131z. Bu de\u011fer, slot props&#8217;lar\u0131n\u0131 i\u00e7eren bir objedir.<\/p>\n<pre><code class=\"language-vue\"><!-- App.vue -->\n<template>\n  <div>\n    <h2>Kapsaml\u0131 Slotlar \u00d6rne\u011fi<\/h2>\n\n    <h3>Kullan\u0131c\u0131 Listesi<\/h3>\n    <ItemList :items=\"users\">\n      <!-- v-slot:default=\"slotProps\" ile slot props'lar\u0131n\u0131 yakal\u0131yoruz -->\n      <template v-slot:default=\"slotProps\">\n        <div class=\"user-card\">\n          <h4>{{ slotProps.item.name }}<\/h4>\n          <p>Email: {{ slotProps.item.email }}<\/p>\n          <p>Ya\u015f: {{ slotProps.item.age }}<\/p>\n          <button @click=\"viewUserDetail(slotProps.item)\">Detaylar\u0131 G\u00f6r<\/button>\n        <\/div>\n      <\/template>\n    <\/ItemList>\n\n    <h3>\u00dcr\u00fcn Listesi (Farkl\u0131 G\u00f6r\u00fcn\u00fcm)<\/h3>\n    <ItemList :items=\"products\">\n      <!-- Slot props'lar\u0131n\u0131 do\u011frudan destructure edebiliriz -->\n      <template #default=\"{ item, index }\">\n        <div class=\"product-item\" :class=\"{ 'highlight': index % 2 === 0 }\">\n          <img :src=\"item.image\" :alt=\"item.name\" class=\"product-image\">\n          <div>\n            <strong>{{ item.name }}<\/strong> - {{ item.price }} TL\n            <p>{{ item.description.substring(0, 50) }}...<\/p>\n            <span v-if=\"item.stock < 10\" class=\"stock-warning\">Son {{ item.stock }} \u00fcr\u00fcn!<\/span>\n          <\/div>\n        <\/div>\n      <\/template>\n    <\/ItemList>\n\n    <h3>Basit Metin Listesi (Varsay\u0131lan Slot \u0130\u00e7eri\u011fi Kullan\u0131m\u0131)<\/h3>\n    <ItemList :items=\"simpleTexts\"><\/ItemList> <!-- Varsay\u0131lan slot i\u00e7eri\u011fi g\u00f6sterilecek -->\n\n  <\/div>\n<\/template>\n\n<script>\nimport ItemList from '.\/components\/ItemList.vue';\n\nexport default {\n  components: {\n    ItemList\n  },\n  data() {\n    return {\n      users: [\n        { id: 1, name: 'Alice Smith', email: 'alice@example.com', age: 30 },\n        { id: 2, name: 'Bob Johnson', email: 'bob@example.com', age: 24 },\n        { id: 3, name: 'Charlie Brown', email: 'charlie@example.com', age: 35 }\n      ],\n      products: [\n        { id: 101, name: 'Ak\u0131ll\u0131 Telefon', price: 7500, stock: 15, image: 'https:\/\/via.placeholder.com\/50', description: 'Y\u00fcksek performansl\u0131 ak\u0131ll\u0131 telefon.' },\n        { id: 102, name: 'Kablosuz Kulakl\u0131k', price: 1200, stock: 5, image: 'https:\/\/via.placeholder.com\/50', description: 'Kristal netli\u011finde ses kalitesi.' },\n        { id: 103, name: 'Ak\u0131ll\u0131 Saat', price: 2800, stock: 20, image: 'https:\/\/via.placeholder.com\/50', description: 'Sa\u011fl\u0131k takibi ve bildirimler.' }\n      ],\n      simpleTexts: [\n        { id: 1, name: '\u0130lk Metin' },\n        { id: 2, name: '\u0130kinci Metin' }\n      ]\n    }\n  },\n  methods: {\n    viewUserDetail(user) {\n      alert(<code>Kullan\u0131c\u0131 Detay\u0131: ${user.name} - ${user.email}<\/code>);\n    }\n  }\n}\n<\/script>\n\n<style scoped>\n.user-card {\n  border: 1px solid #eee;\n  padding: 10px;\n  margin-bottom: 8px;\n  border-radius: 4px;\n}\n.product-item {\n  display: flex;\n  align-items: center;\n  padding: 10px;\n  margin-bottom: 8px;\n  border: 1px solid #eee;\n  border-radius: 4px;\n}\n.product-item.highlight {\n  background-color: #f0f8ff;\n}\n.product-image {\n  width: 50px;\n  height: 50px;\n  margin-right: 10px;\n  object-fit: cover;\n  border-radius: 4px;\n}\n.stock-warning {\n  color: red;\n  font-weight: bold;\n  margin-left: 10px;\n}\n<\/style><\/code><\/pre>\n<p>Yukar\u0131daki \u00f6rnekte, <code>ItemList<\/code> bile\u015feni her bir <code>item<\/code> ve <code>index<\/code>&#8216;i slota ge\u00e7iriyor. <code>App.vue<\/code> i\u00e7inde, bu verilere <code>v-slot:default=\"slotProps\"<\/code> veya k\u0131salt\u0131lm\u0131\u015f <code> #default=\"{ item, index }\"<\/code> syntax&#8217;\u0131 ile eri\u015fiyoruz. Bu sayede, <code>ItemList<\/code> bile\u015feninin temel listeleme mant\u0131\u011f\u0131n\u0131 korurken, her bir \u00f6\u011fenin nas\u0131l g\u00f6sterilece\u011fini tamamen \u00fcst bile\u015fende \u00f6zelle\u015ftirebiliyoruz.<\/p>\n<p>Kapsaml\u0131 slotlar, \u00f6zellikle yeniden kullan\u0131labilir liste, tablo, kart veya d\u00f6ng\u00fcsel i\u00e7erik bile\u015fenleri olu\u015ftururken vazge\u00e7ilmezdir.<\/p>\n<h4>Adland\u0131r\u0131lm\u0131\u015f Kapsaml\u0131 Slotlar<\/h4>\n<p>Kapsaml\u0131 slotlar, adland\u0131r\u0131lm\u0131\u015f slotlarla da birle\u015ftirilebilir. Yani, belirli bir adland\u0131r\u0131lm\u0131\u015f slota \u00e7ocuk bile\u015fenden veri ge\u00e7irebilirsiniz.<\/p>\n<p><strong>1. \u00c7ocuk Bile\u015fende (<code>ChildComponent.vue<\/code>):<\/strong><\/p>\n<pre><code class=\"language-vue\"><!-- components\/DashboardWidget.vue -->\n<template>\n  <div class=\"widget\">\n    <div class=\"widget-header\">\n      <slot name=\"title\" :icon=\"icon\" :widgetId=\"id\">\n        <h3>{{ defaultTitle }}<\/h3>\n      <\/slot>\n    <\/div>\n    <div class=\"widget-content\">\n      <slot :data=\"widgetData\">\n        <p>Widget i\u00e7eri\u011fi burada.<\/p>\n      <\/slot>\n    <\/div>\n    <div class=\"widget-footer\">\n      <slot name=\"actions\" :lastUpdated=\"lastUpdate\">\n        <button>Ayarlar<\/button>\n      <\/slot>\n    <\/div>\n  <\/div>\n<\/template>\n\n<script>\nexport default {\n  props: ['id', 'defaultTitle', 'icon'],\n  data() {\n    return {\n      widgetData: { value: Math.floor(Math.random() * 100), unit: 'adet' },\n      lastUpdate: new Date().toLocaleTimeString()\n    }\n  }\n}\n<\/script>\n\n<style scoped>\n.widget {\n  border: 1px solid #ddd;\n  border-radius: 6px;\n  margin: 15px;\n  width: 300px;\n  box-shadow: 0 2px 5px rgba(0,0,0,0.05);\n}\n.widget-header {\n  background-color: #f8f8f8;\n  padding: 10px;\n  border-bottom: 1px solid #eee;\n}\n.widget-content {\n  padding: 15px;\n}\n.widget-footer {\n  background-color: #f8f8f8;\n  padding: 10px;\n  border-top: 1px solid #eee;\n  text-align: right;\n}\n<\/style><\/code><\/pre>\n<p>Bu widget, <code>title<\/code>, <code>default<\/code> ve <code>actions<\/code> olmak \u00fczere \u00fc\u00e7 slota sahiptir ve her biri farkl\u0131 veriler ge\u00e7irir.<\/p>\n<p><strong>2. \u00dcst Bile\u015fende (<code>ParentComponent.vue<\/code>):<\/strong><\/p>\n<pre><code class=\"language-vue\"><!-- App.vue -->\n<template>\n  <div>\n    <h2>Adland\u0131r\u0131lm\u0131\u015f Kapsaml\u0131 Slotlar \u00d6rne\u011fi<\/h2>\n    <DashboardWidget id=\"widget1\" defaultTitle=\"Performans \u00d6zeti\" icon=\" \">\n      <template #title=\"{ icon }\">\n        <h2>{{ icon }} Performans Metrikleri<\/h2>\n      <\/template>\n\n      <template #default=\"{ data }\">\n        <p>Mevcut De\u011fer: <strong>{{ data.value }} {{ data.unit }}<\/strong><\/p>\n        <div class=\"progress-bar\" :style=\"{ width: data.value + '%' }\"><\/div>\n      <\/template>\n\n      <template #actions=\"{ lastUpdated }\">\n        <button>Yenile<\/button>\n        <small>Son G\u00fcncelleme: {{ lastUpdated }}<\/small>\n      <\/template>\n    <\/DashboardWidget>\n  <\/div>\n<\/template>\n\n<script>\nimport DashboardWidget from '.\/components\/DashboardWidget.vue';\n\nexport default {\n  components: {\n    DashboardWidget\n  }\n}\n<\/script>\n\n<style scoped>\n.progress-bar {\n  height: 10px;\n  background-color: #4CAF50;\n  border-radius: 5px;\n  margin-top: 10px;\n}\n<\/style><\/code><\/pre>\n<p>Burada, <code>#title<\/code> slotu <code>icon<\/code> verisine, <code>#default<\/code> slotu <code>data<\/code> verisine ve <code>#actions<\/code> slotu <code>lastUpdated<\/code> verisine eri\u015febilir. Bu, bile\u015fenlerinizi daha da \u00f6zelle\u015ftirilebilir hale getirir.<\/p>\n<h3>Dinamik Slot \u0130simleri<\/h3>\n<p>Baz\u0131 durumlarda, hangi slota i\u00e7erik sa\u011flayaca\u011f\u0131n\u0131z\u0131n \u00e7al\u0131\u015fma zaman\u0131nda (runtime) belirlenmesi gerekebilir. \u00d6rne\u011fin, bir sekme bile\u015feninde, aktif sekme ad\u0131na g\u00f6re i\u00e7eri\u011fi dinamik olarak yerle\u015ftirmek isteyebilirsiniz. Bunu <code>v-slot<\/code> direktifini dinamik arg\u00fcmanlarla kullanarak yapabilirsiniz.<\/p>\n<pre><code class=\"language-vue\"><!-- components\/DynamicTabs.vue -->\n<template>\n  <div class=\"dynamic-tabs\">\n    <div class=\"tab-header\">\n      <button\n        v-for=\"tab in tabs\"\n        :key=\"tab.id\"\n        @click=\"activeTab = tab.name\"\n        :class=\"{ 'active': activeTab === tab.name }\"\n      >\n        {{ tab.label }}\n      <\/button>\n    <\/div>\n    <div class=\"tab-content\">\n      <!-- Dinamik olarak aktif sekmeye kar\u015f\u0131l\u0131k gelen slotu render ediyoruz -->\n      <slot :name=\"activeTab\"><\/slot>\n    <\/div>\n  <\/div>\n<\/template>\n\n<script>\nexport default {\n  props: {\n    tabs: {\n      type: Array,\n      required: true\n    }\n  },\n  data() {\n    return {\n      activeTab: this.tabs[0] ? this.tabs[0].name : ''\n    }\n  },\n  watch: {\n    tabs: {\n      immediate: true,\n      handler(newTabs) {\n        if (!this.activeTab && newTabs.length > 0) {\n          this.activeTab = newTabs[0].name;\n        }\n      }\n    }\n  }\n}\n<\/script>\n\n<style scoped>\n.dynamic-tabs {\n  margin: 20px;\n  border: 1px solid #ccc;\n  border-radius: 8px;\n}\n.tab-header {\n  display: flex;\n  border-bottom: 1px solid #ccc;\n}\n.tab-header button {\n  padding: 10px 15px;\n  border: none;\n  background-color: #f0f0f0;\n  cursor: pointer;\n  font-size: 1em;\n  border-radius: 8px 8px 0 0;\n  margin-right: 2px;\n}\n.tab-header button.active {\n  background-color: #fff;\n  border-bottom: 2px solid #007bff;\n  color: #007bff;\n}\n.tab-content {\n  padding: 15px;\n  background-color: #fff;\n}\n<\/style><\/code><\/pre>\n<p><strong>\u00dcst Bile\u015fende (<code>App.vue<\/code>):<\/strong><\/p>\n<pre><code class=\"language-vue\"><!-- App.vue -->\n<template>\n  <div>\n    <h2>Dinamik Slotlar \u00d6rne\u011fi<\/h2>\n    <DynamicTabs :tabs=\"myTabs\">\n      <!-- Dinamik slot isimleri i\u00e7in v-slot:[slotName] kullan\u0131l\u0131r -->\n      <template v-slot:[myTabs[0].name]>\n        <h3>{{ myTabs[0].label }} \u0130\u00e7eri\u011fi<\/h3>\n        <p>Bu, ilk sekmenin i\u00e7eri\u011fidir. Dinamik olarak yerle\u015ftirildi.<\/p>\n      <\/template>\n      <template v-slot:[myTabs[1].name]>\n        <h3>{{ myTabs[1].label }} \u0130\u00e7eri\u011fi<\/h3>\n        <ul>\n          <li>\u00d6\u011fe A<\/li>\n          <li>\u00d6\u011fe B<\/li>\n        <\/ul>\n      <\/template>\n      <template v-slot:[myTabs[2].name]>\n        <h3>{{ myTabs[2].label }} \u0130\u00e7eri\u011fi<\/h3>\n        <p>Burada \u00fc\u00e7\u00fcnc\u00fc sekmenin \u00f6zel i\u00e7eri\u011fi bulunuyor.<\/p>\n        <button>Bir \u015eey Yap<\/button>\n      <\/template>\n    <\/DynamicTabs>\n  <\/div>\n<\/template>\n\n<script>\nimport DynamicTabs from '.\/components\/DynamicTabs.vue';\n\nexport default {\n  components: {\n    DynamicTabs\n  },\n  data() {\n    return {\n      myTabs: [\n        { id: 1, name: 'tabA', label: 'Sekme A' },\n        { id: 2, name: 'tabB', label: 'Sekme B' },\n        { id: 3, name: 'tabC', label: 'Sekme C' }\n      ]\n    }\n  }\n}\n<\/script><\/code><\/pre>\n<p>Bu \u00f6rnekte, <code>DynamicTabs<\/code> bile\u015feni aktif sekmeye g\u00f6re ilgili slotu render eder. <code>App.vue<\/code> i\u00e7inde, <code>v-slot:[myTabs[0].name]<\/code> gibi dinamik arg\u00fcman s\u00f6zdizimini kullanarak, hangi slotun hangi i\u00e7eri\u011fi alaca\u011f\u0131n\u0131 programatik olarak belirtebiliriz.<\/p>\n<h3>En \u0130yi Uygulamalar ve \u0130pu\u00e7lar\u0131<\/h3>\n<p>1.  <strong>A\u00e7\u0131k ve Anlaml\u0131 Slot \u0130simleri:<\/strong> Adland\u0131r\u0131lm\u0131\u015f slotlar kullan\u0131rken, <code>header<\/code>, <code>footer<\/code>, <code>sidebar<\/code>, <code>main-content<\/code>, <code>actions<\/code> gibi a\u00e7\u0131klay\u0131c\u0131 isimler kullan\u0131n. Bu, bile\u015feni kullanan di\u011fer geli\u015ftiricilerin (veya gelecekteki sizin) slotlar\u0131n amac\u0131n\u0131 kolayca anlamas\u0131na yard\u0131mc\u0131 olur.<br \/>\n2.  <strong>Varsay\u0131lan \u0130\u00e7erik Sa\u011flama:<\/strong> Her zaman slotlar\u0131n\u0131za varsay\u0131lan i\u00e7erik sa\u011flamay\u0131 d\u00fc\u015f\u00fcn\u00fcn. Bu, \u00fcst bile\u015fen bir slota i\u00e7erik sa\u011flamad\u0131\u011f\u0131nda bile bile\u015feninizin d\u00fczg\u00fcn bir \u015fekilde render edilmesini sa\u011flar ve hata ay\u0131klamay\u0131 kolayla\u015ft\u0131r\u0131r.<br \/>\n3.  <strong>Ne Zaman Prop, Ne Zaman Slot?<\/strong><br \/>\n    *   <strong>Props:<\/strong> Basit veri par\u00e7ac\u0131klar\u0131n\u0131 (string, number, boolean, object, array) veya fonksiyonlar\u0131 \u00e7ocuk bile\u015fene ge\u00e7irmek i\u00e7in kullan\u0131l\u0131r. Bile\u015fenin davran\u0131\u015f\u0131n\u0131 veya k\u00fc\u00e7\u00fck metin par\u00e7alar\u0131n\u0131 yap\u0131land\u0131rmak i\u00e7in idealdir.<br \/>\n    *   <strong>Slots:<\/strong> Daha karma\u015f\u0131k HTML yap\u0131lar\u0131n\u0131, bile\u015fenleri veya \u00fcst bile\u015fenin kontrol etmesi gereken d\u00fczen b\u00f6l\u00fcmlerini \u00e7ocuk bile\u015fene enjekte etmek i\u00e7in kullan\u0131l\u0131r. Bile\u015fenin &#8220;i\u00e7ini&#8221; doldurmak i\u00e7in esneklik sa\u011flar.<br \/>\n4.  <strong>Kapsam Fark\u0131n\u0131 Anlay\u0131n:<\/strong> Normal slot i\u00e7eri\u011fi \u00fcst bile\u015fenin veri kapsam\u0131 i\u00e7inde derlenir. Kapsaml\u0131 slotlar, \u00e7ocuk bile\u015fenin verilerini \u00fcst bile\u015fenin slot i\u00e7eri\u011fine &#8220;geri g\u00f6ndermenin&#8221; yoludur. Bu temel fark\u0131 anlamak, beklenmedik hatalar\u0131 \u00f6nlemenize yard\u0131mc\u0131 olur.<br \/>\n5.  <strong>Performans:<\/strong> Vue.js slotlar\u0131 olduk\u00e7a optimize edilmi\u015ftir. \u0130\u00e7erik, yaln\u0131zca \u00e7ocuk bile\u015fen taraf\u0131ndan ihtiya\u00e7 duyuldu\u011funda render edilir ve Vue&#8217;nun reaktif sistemiyle sorunsuz bir \u015fekilde entegre olur. Performans konusunda endi\u015felenmenize gerek yoktur.<br \/>\n6.  <strong>Eri\u015filebilirlik:<\/strong> Slotlarla olu\u015fturulan dinamik i\u00e7eriklerin eri\u015filebilirlik (accessibility) standartlar\u0131na uygun oldu\u011fundan emin olun. \u00d6rne\u011fin, bir sekme bile\u015feni olu\u015ftururken ARIA rollerini ve \u00f6zelliklerini do\u011fru bir \u015fekilde kullanmaya \u00f6zen g\u00f6sterin.<br \/>\n7.  <strong><code>v-if<\/code> ile Slotlar\u0131 Ko\u015fullu Render Etme:<\/strong> Bir slotun belirli ko\u015fullara ba\u011fl\u0131 olarak render edilmesini istiyorsan\u0131z, <code><slot><\/code> etiketini <code>v-if<\/code> ile kullanabilirsiniz.<\/p>\n<pre><code class=\"language-vue\"><!-- components\/MyConditionalCard.vue -->\n    <template>\n      <div class=\"card\">\n        <div class=\"card-header\">\n          <slot name=\"header\"><\/slot>\n        <\/div>\n        <div class=\"card-body\">\n          <slot><\/slot>\n        <\/div>\n        <div class=\"card-footer\">\n          <slot name=\"footer\" v-if=\"hasFooterSlot\"><\/slot>\n          <span v-else>Varsay\u0131lan Alt Bilgi<\/span>\n        <\/div>\n      <\/div>\n    <\/template>\n    <script>\n    export default {\n      computed: {\n        hasFooterSlot() {\n          \/\/ Bu, Vue 3'te bir slotun i\u00e7eri\u011finin olup olmad\u0131\u011f\u0131n\u0131 kontrol etmenin bir yoludur.\n          \/\/ Vue 2'de this.$slots.footer ile kontrol edilebilir.\n          return !!this.$slots.footer;\n        }\n      }\n    }\n    <\/script><\/code><\/pre>\n<p>    Bu \u00f6rnekte, <code>footer<\/code> slotuna i\u00e7erik sa\u011flan\u0131rsa g\u00f6sterilir, aksi takdirde varsay\u0131lan metin g\u00f6sterilir.<\/p>\n<h3>Yayg\u0131n Hatalar ve Sorun Giderme<\/h3>\n<p>*   <strong>Adland\u0131r\u0131lm\u0131\u015f Slotlar \u0130\u00e7in <code>v-slot<\/code> Kullanmay\u0131 Unutmak:<\/strong> Adland\u0131r\u0131lm\u0131\u015f slotlara i\u00e7erik sa\u011flarken <code><template v-slot:slotName><\/code> veya <code><template #slotName><\/code> kullanmay\u0131 unutmak yayg\u0131n bir hatad\u0131r. Sadece <code><\/p>\n<div slot=\"slotName\"><\/code> (Vue 2&#8217;deki eski syntax) kullanmak Vue 3&#8217;te \u00e7al\u0131\u015fmayacakt\u0131r.<br \/>\n*   <strong>Kapsaml\u0131 Slotlarda Veri Eri\u015fimi:<\/strong> Kapsaml\u0131 slotlar\u0131 kullan\u0131rken, \u00e7ocuk bile\u015fenden gelen verilere <code>v-slot=\"slotProps\"<\/code> veya <code>v-slot=\"{ item, index }\"<\/code> ile eri\u015fmeyi unutmak. Do\u011frudan \u00e7ocuk bile\u015fenin <code>data<\/code> veya <code>props<\/code>&#8216;\u0131na eri\u015fmeye \u00e7al\u0131\u015fmak i\u015fe yaramaz.<br \/>\n*   <strong>Varsay\u0131lan Slot ve Adland\u0131r\u0131lm\u0131\u015f Slot Kar\u0131\u015f\u0131kl\u0131\u011f\u0131:<\/strong> Bir bile\u015fende hem varsay\u0131lan slot hem de adland\u0131r\u0131lm\u0131\u015f slotlar varsa, varsay\u0131lan slota sa\u011flanan i\u00e7erik, hi\u00e7bir <code>v-slot<\/code> direktifi olmayan <code><template><\/code> etiketi i\u00e7ine al\u0131nabilir veya do\u011frudan bile\u015fen etiketleri aras\u0131na yerle\u015ftirilebilir. Ancak adland\u0131r\u0131lm\u0131\u015f slotlar i\u00e7in her zaman <code>v-slot<\/code> kullan\u0131lmal\u0131d\u0131r.<br \/>\n*   <strong>Kapsaml\u0131 Slot Props \u0130simlendirmesi:<\/strong> \u00c7ocuk bile\u015fende slota ba\u011flad\u0131\u011f\u0131n\u0131z prop isimleri (\u00f6rn. <code>:item=\"item\"<\/code>), \u00fcst bile\u015fende yakalad\u0131\u011f\u0131n\u0131z isimlerle (\u00f6rn. <code>\"{ item }\"<\/code>) e\u015fle\u015fmelidir. E\u011fer \u00e7ocukta <code>:user=\"currentUser\"<\/code> \u015feklinde ba\u011flad\u0131ysan\u0131z, \u00fcstte <code>\"{ user }\"<\/code> olarak yakalamal\u0131s\u0131n\u0131z.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Vue.js&#8217;teki slotlar, bile\u015fenlerinizi daha esnek, yeniden kullan\u0131labilir ve g\u00fc\u00e7l\u00fc hale getiren temel bir \u00f6zelliktir. Temel slotlar, adland\u0131r\u0131lm\u0131\u015f slotlar ve \u00f6zellikle kapsaml\u0131 slotlar sayesinde, bile\u015fenlerinizin yap\u0131sal b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc korurken, i\u00e7eriklerini \u00fcst bile\u015fen taraf\u0131ndan tamamen \u00f6zelle\u015ftirebilirsiniz. Bu, karma\u015f\u0131k kullan\u0131c\u0131 aray\u00fczlerini daha mod\u00fcler bir \u015fekilde in\u015fa etmenize, kod tekrar\u0131n\u0131 azaltman\u0131za ve bile\u015fenlerin sorumluluklar\u0131n\u0131 net bir \u015fekilde ay\u0131rman\u0131za yard\u0131mc\u0131 olur.<\/p>\n<p>Slotlar\u0131 etkin bir \u015fekilde kullanarak, hem kendiniz hem de ekibiniz i\u00e7in daha anla\u015f\u0131l\u0131r ve s\u00fcrd\u00fcr\u00fclebilir Vue.js uygulamalar\u0131 geli\u015ftirebilirsiniz. Bu k\u0131lavuz, slotlar\u0131n farkl\u0131 t\u00fcrlerini ve kullan\u0131m senaryolar\u0131n\u0131 anlaman\u0131za yard\u0131mc\u0131 olarak, Vue.js projelerinizde bu g\u00fc\u00e7l\u00fc \u00f6zelli\u011fi tam potansiyeliyle kullanman\u0131z\u0131 sa\u011flayacakt\u0131r.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Vue. js&#8217;te Bile\u015fen Slotlar\u0131n\u0131 Kullanma K\u0131lavuzu Vue.","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":[1402],"tags":[],"class_list":{"0":"post-40536","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-vue","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>Vue.js&#039;te Bile\u015fen Slotlar\u0131n\u0131 Kullanma K\u0131lavuzu - 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\/vue-jste-bilesen-slotlarini-kullanma-kilavuzu\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Vue.js&#039;te Bile\u015fen Slotlar\u0131n\u0131 Kullanma K\u0131lavuzu\" \/>\n<meta property=\"og:description\" content=\"Vue. js&#039;te Bile\u015fen Slotlar\u0131n\u0131 Kullanma K\u0131lavuzu Vue.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/vue-jste-bilesen-slotlarini-kullanma-kilavuzu\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-27T11:40:55+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/via.placeholder.com\/200x100\" \/>\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=\"12 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/vue-jste-bilesen-slotlarini-kullanma-kilavuzu\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/vue-jste-bilesen-slotlarini-kullanma-kilavuzu\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Vue.js&#8217;te Bile\u015fen Slotlar\u0131n\u0131 Kullanma K\u0131lavuzu\",\"datePublished\":\"2026-02-27T11:40:55+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/vue-jste-bilesen-slotlarini-kullanma-kilavuzu\/\"},\"wordCount\":2011,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"image\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/vue-jste-bilesen-slotlarini-kullanma-kilavuzu\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/via.placeholder.com\/200x100\",\"articleSection\":[\"Vue\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/vue-jste-bilesen-slotlarini-kullanma-kilavuzu\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/vue-jste-bilesen-slotlarini-kullanma-kilavuzu\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/vue-jste-bilesen-slotlarini-kullanma-kilavuzu\/\",\"name\":\"Vue.js'te Bile\u015fen Slotlar\u0131n\u0131 Kullanma K\u0131lavuzu - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/vue-jste-bilesen-slotlarini-kullanma-kilavuzu\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/vue-jste-bilesen-slotlarini-kullanma-kilavuzu\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/via.placeholder.com\/200x100\",\"datePublished\":\"2026-02-27T11:40:55+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/vue-jste-bilesen-slotlarini-kullanma-kilavuzu\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/vue-jste-bilesen-slotlarini-kullanma-kilavuzu\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/vue-jste-bilesen-slotlarini-kullanma-kilavuzu\/#primaryimage\",\"url\":\"https:\/\/via.placeholder.com\/200x100\",\"contentUrl\":\"https:\/\/via.placeholder.com\/200x100\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/vue-jste-bilesen-slotlarini-kullanma-kilavuzu\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Vue.js&#8217;te Bile\u015fen Slotlar\u0131n\u0131 Kullanma K\u0131lavuzu\"}]},{\"@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":"Vue.js'te Bile\u015fen Slotlar\u0131n\u0131 Kullanma K\u0131lavuzu - 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\/vue-jste-bilesen-slotlarini-kullanma-kilavuzu\/","og_locale":"tr_TR","og_type":"article","og_title":"Vue.js'te Bile\u015fen Slotlar\u0131n\u0131 Kullanma K\u0131lavuzu","og_description":"Vue. js'te Bile\u015fen Slotlar\u0131n\u0131 Kullanma K\u0131lavuzu Vue.","og_url":"https:\/\/fatihsoysal.com\/blog\/vue-jste-bilesen-slotlarini-kullanma-kilavuzu\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-02-27T11:40:55+00:00","og_image":[{"url":"https:\/\/via.placeholder.com\/200x100","type":"","width":"","height":""}],"author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"12 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/vue-jste-bilesen-slotlarini-kullanma-kilavuzu\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/vue-jste-bilesen-slotlarini-kullanma-kilavuzu\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Vue.js&#8217;te Bile\u015fen Slotlar\u0131n\u0131 Kullanma K\u0131lavuzu","datePublished":"2026-02-27T11:40:55+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/vue-jste-bilesen-slotlarini-kullanma-kilavuzu\/"},"wordCount":2011,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"image":{"@id":"https:\/\/fatihsoysal.com\/blog\/vue-jste-bilesen-slotlarini-kullanma-kilavuzu\/#primaryimage"},"thumbnailUrl":"https:\/\/via.placeholder.com\/200x100","articleSection":["Vue"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/vue-jste-bilesen-slotlarini-kullanma-kilavuzu\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/vue-jste-bilesen-slotlarini-kullanma-kilavuzu\/","url":"https:\/\/fatihsoysal.com\/blog\/vue-jste-bilesen-slotlarini-kullanma-kilavuzu\/","name":"Vue.js'te Bile\u015fen Slotlar\u0131n\u0131 Kullanma K\u0131lavuzu - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/vue-jste-bilesen-slotlarini-kullanma-kilavuzu\/#primaryimage"},"image":{"@id":"https:\/\/fatihsoysal.com\/blog\/vue-jste-bilesen-slotlarini-kullanma-kilavuzu\/#primaryimage"},"thumbnailUrl":"https:\/\/via.placeholder.com\/200x100","datePublished":"2026-02-27T11:40:55+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/vue-jste-bilesen-slotlarini-kullanma-kilavuzu\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/vue-jste-bilesen-slotlarini-kullanma-kilavuzu\/"]}]},{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/vue-jste-bilesen-slotlarini-kullanma-kilavuzu\/#primaryimage","url":"https:\/\/via.placeholder.com\/200x100","contentUrl":"https:\/\/via.placeholder.com\/200x100"},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/vue-jste-bilesen-slotlarini-kullanma-kilavuzu\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Vue.js&#8217;te Bile\u015fen Slotlar\u0131n\u0131 Kullanma K\u0131lavuzu"}]},{"@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\/40536","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=40536"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/40536\/revisions"}],"predecessor-version":[{"id":40537,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/40536\/revisions\/40537"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=40536"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=40536"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=40536"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}