فهرست سرفصل‌های 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 — <Teleport> (<Teleport>)

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

<Teleport> (<Teleport>)

اینجا با «تلپورت در Vue» آشنا می شوی. «تلپورت (Teleport)» یعنی جابه جایی محتوا. یعنی یک تگ را از جای فعلی، به جای دیگری در DOM ببری.

تلپورت در Vue چیست؟

کامپوننت <Teleport> با prop به نام to کار می کند. این prop مقصد را مشخص می کند. مثلاً body. سپس عنصر از ساختار فعلی خارج می شود. اما هنوز در همان صفحه است.

برای دیدن جابه جایی، ابزار Inspect را باز کن. عنصر به مقصد منتقل شده است. اگر چند تلپورت به یک مقصد باشند، آخرین مورد پایین تر قرار می گیرد.

اگر یک کامپوننت را تلپورت کنی، ارتباط prop/emit یا provide/inject مثل قبل کار می کند. چون منطق ارتباطی جابه جا نمی شود.

اگر بخشی از محتوا را تلپورت کنی، کدهای داخل <script> و <style> همان کامپوننت، همچنان روی آن محتوا اثر دارند.

ویژگی ها (Props)

  • to: اجباری، رشته. مقصد عنصر تلپورت شده را مشخص می کند.
  • disabled: اختیاری، بولین. اگر true باشد، تلپورت موقتاً غیرفعال می شود.

نمونه سریع تلپورت به body

در این مثال، یک <div> به ریشه body می رود. مثل وقتی که یک اعلان را همیشه بالای صفحه می خواهی.

<template>
  <Teleport to="body">
    <div id="redDiv">Hello!</div>
  </Teleport>
</template>

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

تلپورت همراه با منطق و استایل

این مثال نشان می دهد استایل scoped و محاسبات reactive روی محتوای تلپورت شده هم اعمال می شوند.

<template>
  <div>
    <h2>Component</h2>
    <p>This is the inside of the component.</p>
    <Teleport to="body">
      <div
        id="redDiv"
        @click="toggleVal = !toggleVal"
        :style="{ backgroundColor: bgColor }"
      >
        Hello!<br>
        Click me!
      </div>
    </Teleport>
  </div>
</template>
<script>
export default {
  data() {
    return {
      toggleVal: true
    };
  },
  computed: {
    bgColor() {
      if (this.toggleVal) {
        return "lightpink";
      }
      else {
        return "lightgreen";
      }
    }
  }
};
<\/script>
<style scoped>
#redDiv {
  margin: 10px;
  padding: 10px;
  display: inline-block;
}
#redDiv:hover {
  cursor: pointer;
}
</style>

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

روشن و خاموش کردن تلپورت

با prop بولین disabled می توانی تلپورت را موقتاً متوقف کنی.

<template>
  <div>
    <h2>Component</h2>
    <p>This is the inside of the component.</p>
    <button @click="teleportOn = !teleportOn">Teleport on/off</button>
    <Teleport to="body" :disabled="teleportOn">
      <div id="redDiv">Hello!</div>
    </Teleport>
  </div>
</template>
<script>
export default {
  data() {
    return {
      teleportOn: true
    };
  }
};
<\/script>
<style scoped>
#redDiv {
  background-color: lightcoral;
  margin: 10px;
  padding: 10px;
  width: 100px;
}
</style>

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

گام های عملی برای استفاده

  1. مقصد مناسب را انتخاب کن؛ مثل body یا یک #modal-root.
  2. <Teleport to="مقصد"> را در قالب قرار بده.
  3. اگر لازم شد، با disabled تلپورت را موقتاً خاموش کن.
  4. با Inspect جابه جایی را بررسی کن و مطمئن شو.

نکته: تلپورت برای پاپ آپ، منو، و اعلان ها عالی است. این عناصر باید از محدودیت z-index والدها آزاد باشند.

هشدار: مقصد باید در DOM موجود باشد. اگر نبود، تلپورت نتیجه مطلوب نمی دهد.

جمع بندی سریع

  • تلپورت در Vue، محتوا را جابه جا می کند.
  • prop الزامی to مقصد را تعیین می کند.
  • منطق و استایل همچنان کار می کنند.
  • disabled تلپورت را موقتاً خاموش می کند.
  • Inspect کمک می کند جابه جایی را ببینی.