فهرست سرفصل‌های 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 — تغییردهنده های رویداد (Event Modifiers)

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

تغییردهنده های رویداد (Event Modifiers)

«تغییردهنده رویداد (Event Modifier)» یعنی پسوندی برای v-on که رفتار رویداد را دقیق تر کنترل می کند. مثلا فقط یک بار اجرا شود، پیش فرض لغو شود، یا با کلید خاص اجرا شود.

چطور رفتار v-on را تغییر دهیم؟

کافی است نقطه و اسم تغییردهنده را اضافه کنیم. مثلا .once یعنی متد فقط بار اول اجرا شود.

<div id="app">
  <p>Click the button to create an alert:</p>
  <button v-on:click.once="createAlert">Create Alert</button>
</div>

<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script>
const app = Vue.createApp({
  methods: {
    createAlert() {
      alert('Alert created from button click');
    }
  }
});
app.mount('#app');
<\/script>

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

نکته: می توان همان کار را داخل متد با event.preventDefault() انجام داد؛ اما تغییردهنده ها خواناتر هستند.

تغییردهنده های رویداد صفحه کلید

رویدادهای «keydown»، «keypress»، «keyup» داریم. با پسوندهایی مثل .enter، .space، یا حروف مثل .s روی کلید خاص گوش می دهیم.

<input v-on:keydown="getKey">
<p>{{ keyValue }}</p>

<script>
const app = Vue.createApp({
  data() {
    return {
      keyValue: ''
    };
  },
  methods: {
    getKey(evt) {
      this.keyValue = evt.key;
      console.log(evt.key);
    }
  }
});
<\/script>

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

نمونه: اجرای متد با کلید مشخص

با .s فقط هنگام فشردن «S» متد اجرا می شود.

<div id="app">
  <p>Try pressing the 's' key:</p>
  <textarea v-on:keyup.s="createAlert"></textarea>
</div>

<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script>
const app = Vue.createApp({
  methods: {
    createAlert() {
      alert("You pressed the 'S' key!");
    }
  }
});
app.mount('#app');
<\/script>

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

ترکیب چند تغییردهنده

می توان چند پسوند را ترکیب کرد. مثلا همزمان .ctrl و .s باهم.

<div id="app">
  <p>Press Ctrl + S inside textarea:</p>
  <textarea v-on:keydown.ctrl.s="createAlert"></textarea>
</div>

<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script>
const app = Vue.createApp({
  methods: {
    createAlert() {
      alert("You pressed the 'S' and 'Ctrl' keys, in combination!");
    }
  }
});
app.mount('#app');
<\/script>

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

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

برای تشخیص دکمه خاص از .left، .center، .right استفاده کن. می توان با کلیدهای سیستمی هم ترکیب کرد.

<div id="app">
  <div
    v-on:click.right="changeColor"
    v-bind:style="{ backgroundColor: 'hsl(' + bgColor + ',80%,80%)' }">
    <p>Press right mouse button here.</p>
  </div>
</div>

<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script>
const app = Vue.createApp({
  data() {
    return {
      bgColor: 0
    };
  },
  methods: {
    changeColor() {
      this.bgColor = this.bgColor + 50;
    }
  }
});
app.mount('#app');
<\/script>

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

ترکیب با کلیدهای سیستمی و جلوگیری از منوی راست کلیک

می توان .ctrl را افزود. همچنین با .prevent منوی پیش فرض راست کلیک را مخفی کن.

<!-- Right click + Ctrl -->
<div
  v-on:click.right.ctrl="changeColor"
  v-bind:style="{ backgroundColor: 'hsl(' + bgColor + ',80%,80%)' }">
  <p>Press right mouse button here.</p>
</div>

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

<!-- Right click + prevent default menu -->
<div
  v-on:click.right.prevent="changeColor"
  v-bind:style="{ backgroundColor: 'hsl(' + bgColor + ',80%,80%)' }">
  <p>Press right mouse button here.</p>
</div>

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

نمونه پیشرفته: کلیکِ چپ + شیفت

با click.left.shift تصویر بعدی نمایش داده می شود.

<div id="app">
  <p>Hold 'Shift' key and press left mouse button:</p>
  <img v-on:click.left.shift="changeImg" v-bind:src="imgUrl">
</div>

<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script>
const app = Vue.createApp({
  data() {
    return {
      imgUrlIndex: 0,
      images: [
        'img_tiger_square.jpeg',
        'img_moose_square.jpeg',
        'img_kangaroo_square.jpeg'
      ],
      imgUrl: 'img_tiger_square.jpeg'
    };
  },
  methods: {
    changeImg() {
      this.imgUrlIndex = this.imgUrlIndex + 1;
      if (this.imgUrlIndex >= 3) {
        this.imgUrlIndex = 0;
      }
      this.imgUrl = this.images[this.imgUrlIndex];
    }
  }
});
app.mount('#app');
<\/script>

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

گام های عملی

  1. رویداد را با v-on تنظیم کن.
  2. پسوند مناسب را اضافه کن.
  3. متد را ساده و خوانا بنویس.

جمع بندی سریع

  • .once فقط یک بار اجرا می کند.
  • .prevent رفتار پیش فرض را لغو می کند.
  • کلیدها را با .enter، .s و… هدف بگیر.
  • می توان تغییردهنده ها را ترکیب کرد.

برای تمرین بیشتر، صفحه متدها و v-on را ببین. عبارت «تغییردهنده های رویداد» را در پروژه ات استفاده کن.