فهرست سرفصل‌های Vue
خانه (HOME) معرفی (Intro) دایرکتیوها (Directives) v-bind (v-bind) v-if (v-if) v-show (v-show) v-for (v-for) رویدادها (Events) v-on (v-on) متدها (Methods) تغییردهنده های رویداد (Event Modifiers) فرم ها (Forms) v-model (v-model) بایندینگ CSS (CSS Binding) ویژگی های محاسبه شده (Computed Properties) واچرها (Watchers) قالب ها (Templates) چرا، چگونه و راه اندازی (Why, How and Setup) اولین صفحه SFC (First SFC Page) کامپوننت ها (Components) پراپس (Props) کامپوننت های v-for (v-for Components) $emit() ($emit()) ویژگی های عبوری (Fallthrough) (Fallthrough Attributes) استایل Scoped (Scoped Styling) کامپوننت های محلی (Local Components) اسلات ها (Slots) v-slot (v-slot) اسلات های Scoped (Scoped Slots) کامپوننت های پویا (Dynamic Components) Teleport (Teleport) درخواست HTTP (HTTP Request) رفرنس های تمپلیت (Template Refs) هوک های چرخه عمر (Lifecycle Hooks) Provide/Inject (Provide/Inject) مسیریابی (Routing) ورودی های فرم (Form Inputs) انیمیشن ها (Animations) انیمیشن با v-for (Animations with v-for) بیلد (Build) Composition API (Composition API) ویژگی های توکار (Built-in Attributes) ویژگی 'is' ('is' Attribute) ویژگی 'key' ('key' Attribute) ویژگی 'ref' ('ref' Attribute) کامپوننت های توکار (Built-in Components) <KeepAlive> (<KeepAlive>) <Teleport> (<Teleport>) <Transition> (<Transition>) <TransitionGroup> (<TransitionGroup>) المان های توکار (Built-in Elements) <component> (<component>) <slot> (<slot>) <template> (<template>) نمونه کامپوننت (Component Instance) $attrs ($attrs) $data ($data) $el ($el) $parent ($parent) $props ($props) $refs ($refs) $root ($root) $slots ($slots) $emit() ($emit()) $forceUpdate() ($forceUpdate()) $nextTick() ($nextTick()) $watch() ($watch()) دایرکتیوها (Directives) v-bind (v-bind) v-cloak (v-cloak) v-for (v-for) v-html (v-html) v-if (v-if) v-else-if (v-else-if) v-else (v-else) v-memo (v-memo) v-model (v-model) v-on (v-on) v-once (v-once) v-pre (v-pre) v-show (v-show) v-slot (v-slot) v-text (v-text) گزینه های نمونه (Instance Options) داده ها (data) متدها (methods) محاسبه شده ها (computed) watch (watch) پراپس (props) emits (emits) expose (expose) هوک های چرخه عمر (Lifecycle Hooks) beforeCreate (beforeCreate) created (created) beforeMount (beforeMount) mounted (mounted) beforeUpdate (beforeUpdate) updated (updated) beforeUnmount (beforeUnmount) unmounted (unmounted) errorCaptured (errorCaptured) renderTracked (renderTracked) renderTriggered (renderTriggered) activated (activated) deactivated (deactivated) serverPrefetch (serverPrefetch) مثال ها (Examples) تمرین ها (Exercises) کوییز (Quiz) سیلابس (Syllabus) برنامه مطالعه (Study Plan) سرور (Server) گواهینامه (Certificate)
نتیجه‌ای برای جستجو یافت نشد.
Vue

Vue — اسلات ها (Slots)

آخرین بروزرسانی: 1404/08/21

اسلات ها (Slots)

اسلات (Slot) یعنی «جای خالیِ محتوا» داخل کامپوننت. والد، متن یا HTML را می فرستد؛ فرزند آن را جایگذاری می کند. مثل برگه تمرین که جاهایی نقطه چین دارد و تو پاسخ را می نویسی.

اسلات چیست؟

تا اینجا کامپوننت را خودبسته نوشتیم. اما می توانیم بین برچسب های باز و بسته، محتوا بدهیم.

<!-- App.vue -->
<template>
  <slot-comp />
</template>

مشاهده در ادیتور

<!-- App.vue -->
<template>
  <slot-comp>Hello World!</slot-comp>
</template>

مشاهده در ادیتور

برای نمایش محتوا در فرزند، تگ <slot> می گذاریم تا جایگزین شود.

<!-- SlotComp.vue -->
<template>
  <div>
    <p>SlotComp.vue</p>
    <slot></slot>
  </div>
</template>

مشاهده در ادیتور

اسلات به عنوان کارت

می توانیم محتوای متنوع بدهیم و درون کامپوننت، ظاهر کارت بسازیم.

<!-- App.vue -->
<template>
  <h3>Slots in Vue</h3>
  <p>We create card-like div boxes from the foods array.</p>
  <div id="wrapper">
    <slot-comp v-for="x in foods">
      <img v-bind:src="x.url" />
      <h4>{{ x.name }}</h4>
      <p>{{ x.desc }}</p>
    </slot-comp>
  </div>
</template>

مشاهده در ادیتور

<!-- SlotComp.vue -->
<template>
  <div>
    <slot></slot>
  </div>
</template>
<script><\/script>
<style scoped>
  div {
    box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2);
    border-radius: 10px;
    margin: 10px;
  }
</style>

مشاهده در ادیتور

استفاده دوباره: ساخت فوتر

همان کارت را برای بخش های دیگر، مثل فوتر، دوباره استفاده کن.

<!-- App.vue -->
<template>
  <h3>Reusable Slot Cards</h3>
  <p>We create card-like div boxes from the foods array.</p>
  <p>We also create a card-like footer by reusing the same component.</p>
  <div id="wrapper">
    <slot-comp v-for="x in foods">
      <img v-bind:src="x.url" />
      <h4>{{ x.name }}</h4>
    </slot-comp>
  </div>
  <footer>
    <slot-comp>
      <h4>Footer</h4>
    </slot-comp>
  </footer>
</template>

مشاهده در ادیتور

محتوای پیش فرض (Fallback)

اگر والد محتوا نداد، می توانیم متن پیش فرض داخل اسلات نمایش دهیم.

<!-- App.vue -->
<template>
  <h3>Slots Fallback Content</h3>
  <p>A component without content provided can have fallback content in the slot tag.</p>
  <slot-comp>
    <!-- Empty -->
  </slot-comp>
  <slot-comp>
    <h4>This content is provided from App.vue</h4>
  </slot-comp>
</template>

مشاهده در ادیتور

<!-- SlotComp.vue -->
<template>
  <div>
    <slot>
      <h4>This is fallback content</h4>
    </slot>
  </div>
</template>

مشاهده در ادیتور

نکته و ادامه مسیر

نکته: اسلات محتوا را جابه جا نمی کند؛ فقط جایگذاری می کند. برای نام گذاری و داده اسلات ها بعداً به v-slot برو. همچنین برای مدیریت کامپوننت ها به کامپوننت های محلی سر بزن.

جمع بندی سریع

  • اسلات، جای خالیِ محتواست.
  • والد محتوا می فرستد؛ فرزند نمایش می دهد.
  • می توان کارت های تکرارشدنی ساخت.
  • Fallback یعنی متن پیش فرض داخل اسلات.