فهرست سرفصل‌های 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 — کامپوننت های پویا (Dynamic Components)

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

کامپوننت های پویا (Dynamic Components)

کامپوننت پویا یعنی تعویض نمایشی بین چند کامپوننت. مثل عوض کردن تب های مرورگر. ویژگی «is» تعیین می کند کدام کامپوننت الآن فعال باشد. «ویژگی (Attribute)» یعنی مشخصه ای روی تگ که مقدار می گیرد.

تگ <component> و ویژگی is

با <component> جایِ کامپوننت فعال را می گذاریم. سپس با v-bind، مقدار is را اسم کامپوننت قرار می دهیم.

<template>
  <h1>Dynamic Components</h1>
  <p>App.vue switches between which component to show.</p>
  <button @click="toggleValue = !toggleValue">
    Switch component
  </button>
  <component :is="activeComp"></component>
</template>

<script>
export default {
  data() {
    return {
      toggleValue: true
    };
  },
  computed: {
    activeComp() {
      if (this.toggleValue) {
        return 'comp-one';
      }
      else {
        return 'comp-two';
      }
    }
  }
};
<\/script>

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

حفظ وضعیت با <KeepAlive>

بدون KeepAlive، با جابه جایی، وضعیت از دست می رود. با KeepAlive، فرم ها و انتخاب ها حفظ می شوند.

<template>
  <h1>Dynamic Components</h1>
  <p>App.vue switches between which component to show.</p>
  <button @click="toggleValue = !toggleValue">
    Switch component
  </button>
  <KeepAlive>
    <component :is="activeComp"></component>
  </KeepAlive>
</template>

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

شامل/حذف در KeepAlive

می توانیم مشخص کنیم کدام کامپوننت ها زنده بمانند. برای این کار، باید name در export داشته باشند.

<script>
export default {
  name: 'CompOne',
  data() {
    return {
      imgSrc: 'img_question.svg'
    };
  }
};
<\/script>

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

<template>
  <h1>Dynamic Components</h1>
  <p>App.vue switches between which component to show.</p>
  <button @click="toggleValue = !toggleValue">
    Switch component
  </button>
  <KeepAlive include="CompOne">
    <component :is="activeComp"></component>
  </KeepAlive>
</template>

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

<template>
  <h1>Dynamic Components</h1>
  <p>App.vue switches between which component to show.</p>
  <button @click="toggleValue = !toggleValue">
    Switch component
  </button>
  <KeepAlive exclude="CompOne">
    <component :is="activeComp"></component>
  </KeepAlive>
</template>

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

چند نام، و ویژگی max

می توان چند نام با ویرگول داد. همچنین با max، تعداد حافظه وضعیت محدود می شود.

<template>
  <h1>Dynamic Components</h1>
  <button @click="compNbr++">
    Next component
  </button>
  <KeepAlive include="CompOne,CompThree">
    <component :is="activeComp"></component>
  </KeepAlive>
</template>

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

<template>
  <h1>Dynamic Components</h1>
  <label><input type="radio" name="rbgComp" v-model="compName" :value="'comp-one'"> One</label>
  <label><input type="radio" name="rbgComp" v-model="compName" :value="'comp-two'"> Two</label>
  <label><input type="radio" name="rbgComp" v-model="compName" :value="'comp-three'"> Three</label>
  <KeepAlive :max="2">
    <component :is="activeComp"></component>
  </KeepAlive>
</template>

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

گام های عملی

  1. کامپوننت ها را بساز و نام گذاری کن (name).
  2. در والد، تگ <component> را قرار بده.
  3. activeComp را محاسبه کن و در :is بگذار.
  4. در صورت نیاز، از <KeepAlive> برای حفظ وضعیت استفاده کن.

نکته: برای SEO داخلی، لینک «کامپوننت پویا» را به صفحات مرتبط بده.

جمع بندی سریع

  • :is تعیین کننده کامپوننت فعال است.
  • KeepAlive وضعیت را حفظ می کند.
  • include و exclude دامنه حافظه را کنترل می کنند.
  • max تعداد کامپوننت های ذخیره شده را محدود می کند.

برای ادامه مسیر: کامپوننت پویا با v-slot را ببین و همچنین Teleport برای جابه جایی رندر.