فهرست سرفصل‌های 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)
نتیجه‌ای برای جستجو یافت نشد.

$emit() ($emit())

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

1) ساخت رویداد سفارشی با $emit()

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

<script>
export default {
  methods: {
    toggleFavorite() {
      this.$emit('toggle-favorite');
    }
  }
};
<\/script>

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

2) دریافت رویداد در والد (emit ویو)

در والد، رویداد را با @ می شنویم. سپس متدی را صدا می زنیم تا رخداد دیده شود.

<template>
  <food-item
    v-for="x in foods"
    :key="x.name"
    :food-name="x.name"
    :food-desc="x.desc"
    :is-favorite="x.favorite"
    @toggle-favorite="receiveEmit" />
</template>

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

<script>
export default {
  methods: {
    receiveEmit() {
      alert('Hello World!');
    }
  }
};
<\/script>

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

3) ارسال داده همراه رویداد

باید بدانیم کدام غذا کلیک شده است. پس نام غذا را با رویداد می فرستیم. سپس در والد، مقدار را می گیریم و نمایش می دهیم.

<script>
export default {
  methods: {
    toggleFavorite() {
      this.$emit('toggle-favorite', this.foodName);
    }
  }
};
<\/script>

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

<script>
export default {
  methods: {
    receiveEmit(foodId) {
      alert('You clicked: ' + foodId);
    }
  }
};
<\/script>

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

حالا وضعیت «دلخواه» را در آرایه والد تغییر می دهیم. این تغییر، واقعی و در جای درست است.

<script>
export default {
  methods: {
    receiveEmit(foodId) {
      const foundFood = this.foods.find((food) => {
        return food.name === foodId;
      });
      foundFood.favorite = !foundFood.favorite;
    }
  }
};
<\/script>

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

4) به روزرسانی نمایش با prop والد

چون prop از والد می آید، کافی است در فرزند از همان prop استفاده کنیم. دیگر data اضافی لازم نیست.

<img src="/img_quality.svg" v-show="isFavorite" />

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

نکته: می توانی کامپوننت های v-for را هم بررسی کنی. ترکیب v-for با emit عالی می شود.

5) گزینه emits برای مستندسازی

مثل props، می توانیم emits را مستند کنیم. این کار فهم استفاده کامپوننت را ساده می کند.

<script>
export default {
  props: [
    'foodName',
    'foodDesc',
    'isFavorite'
  ],
  emits: [
    'toggle-favorite'
  ],
  methods: {
    toggleFavorite() {
      this.$emit('toggle-favorite', this.foodName);
    }
  }
};
<\/script>

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

جمع بندی سریع

  • $emit() پیام را از فرزند می فرستد.
  • در والد با @ گوش بده.
  • داده لازم را با رویداد بفرست.
  • وضعیت را فقط در والد تغییر بده.
  • emits را برای مستندات اضافه کن.

نکته: برای مرور، صفحه پراپس ویو و همین صفحه emit ویو را نشانه گذاری کن.