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

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

$emit() ($emit())

متد $emit() یعنی «رویداد سفارشی (Custom Event)» را از فرزند به والد بفرست. مثل وقتی زنگ می زنی و به مامان خبر می دهی. سپس والد می تواند گوش دهد و واکنش نشان دهد.

تعریف و کاربرد $emit()

$emit() یک رویداد سفارشی را در فرزند فعال می کند. بنابراین والد با v-on یا @ آن رویداد را می شنود. همچنین می توان همراه رویداد «بار (Payload)» هم فرستاد، مثل پیام یا عدد.

نکته: برای مسیر برگشتیِ داده از والد به فرزند، از $props استفاده کن. برای چینش محتوا در فرزند، صفحه $slots را ببین.

مثال ساده: فقط اعلام رویداد

با کلیک، فرزند رویداد سفارشی را به والد می فرستد. والد می تواند آن را شنود کند.

<template>
  <div>
    <h3>ChildComp.vue</h3>
    <p>Click the button to trigger a custom event.</p>
    <button v-on:click="onClick">Trigger</button>
  </div>
</template>

<script>
export default {
  methods: {
    onClick() {
      this.$emit('custom-event');
    }
  }
};
<\/script>

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

مثال 1: ارسال پیام به والد

اینجا یک متن می گیریم و همان را همراه رویداد می فرستیم. والد پیام را دریافت می کند.

<template>
  <div>
    <h3>ChildComp.vue</h3>
    <p>Write and send the message to parent using $emit().</p>
    <input type="text" v-model="message" placeholder="write something..">
    <button v-on:click="send">Send</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      message: null;
    };
  },
  methods: {
    send() {
      this.$emit('message-sent', this.message);
    }
  }
};
<\/script>

<style scoped>
div {
  border: solid black 1px;
  padding: 10px;
  max-width: 350px;
  margin-top: 20px;
}
input {
  display: block;
  margin-bottom: 15px;
}
<\/style>

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

مثال 2: ارسال چند مقدار و کار با $refs

نام محصول و امتیاز را می فرستیم. سپس ورودی نام دوباره فوکوس می گیرد.

<template>
  <div>
    <h3>ChildComp.vue</h3>
    <p>Rate a product and send name and rating.</p>
    <input type="text" v-model="productName" placeholder="Product name.." ref="inpName">
    <input type="number" v-model="productRating" placeholder="Rating 1 to 10..">
    <button v-on:click="send">Register</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      productName: null;
      productRating: null;
    };
  },
  methods: {
    send() {
      this.$emit('message-sent', this.productName, this.productRating);
      this.productName = null;
      this.productRating = null;
      this.$refs.inpName.focus();
    }
  },
  mounted() {
    this.$refs.inpName.focus();
  }
};
<\/script>

<style scoped>
div {
  border: solid black 1px;
  padding: 10px;
  max-width: 350px;
  margin-top: 20px;
}
input {
  display: block;
  margin-bottom: 15px;
}
<\/style>

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

مثال 3: مستندسازی رویدادها با emits

گزینه emits فقط رویدادهای مجاز این کامپوننت را اعلام می کند. این کار خوانایی را بهتر می کند.

<template>
  <div>
    <h3>ChildComp.vue</h3>
    <p>Click to trigger a documented custom event.</p>
    <button v-on:click="trigger">Trigger</button>
  </div>
</template>

<script>
export default {
  emits: ['custom-event'],
  methods: {
    trigger() {
      this.$emit('custom-event');
    }
  }
};
<\/script>

<style scoped>
div {
  border: solid black 1px;
  padding: 10px;
  max-width: 350px;
  margin-top: 20px;
}
<\/style>

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

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

  1. رویداد را در فرزند با $emit(name) فعال کن.
  2. اگر لازم بود، بار رویداد را اضافه کن.
  3. در والد، رویداد را با v-on:name گوش کن.

هشدار: رویداد را کوتاه و معنی دار نام گذاری کن. سپس از نوشتن منطق سنگین در فرزند خودداری کن.

جمع بندی سریع

  • $emit برای ارتباط فرزند به والد است.
  • می توان بار رویداد ارسال کرد.
  • emits مستندسازی رویدادها را آسان می کند.
  • برای دریافت، از رویداد سفارشی Vue در والد استفاده کن.