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

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

v-model (v-model)

دستور v-model یعنی «اتصال دوطرفه (Two-way Binding)». یعنی ورودی عوض شود، داده هم عوض می شود؛ برعکسش هم درست است. پس فرم ها در Vue ساده تر و سریع تر می شوند.

اتصال دوطرفه ساده

یک ورودی متن بساز. مقدارش را با v-model به داده وصل کن.

<div id="app">
  <input type="text" v-model="inpText">
  <p>{{ inpText }}<\/p>
<\/div>

<script src="https://unpkg.com/vue@3/dist/vue.global.js"><\/script>
<script>
const app = Vue.createApp({
  data() {
    return {
      inpText: 'Initial text'
    };
  }
});
app.mount('#app');
<\/script>

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

نکته: می شود همین رفتار را با v-bind:value و v-on:input ساخت؛ اما v-model کوتاه تر و خواناتر است.

چک باکس پویا با v-model

می خواهیم «مهم بودن» را تیک بزنیم. متن کناری، وضعیت را لحظه ای نشان می دهد.

<div id="app">
  <form>
    <p>Important item?<\/p>
    <label>
      <input type="checkbox" v-model="important">
      {{ important }}
    <\/label>
  <\/form>
<\/div>

<script src="https://unpkg.com/vue@3/dist/vue.global.js"><\/script>
<script>
const app = Vue.createApp({
  data() {
    return {
      important: false
    };
  }
});
app.mount('#app');
<\/script>

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

افزودن «مهم بودن» به فرم خرید

حالا «مهم بودن» را به فرم خرید اضافه کن. آیتم بساز؛ لیست را به روز کن.

<div id="app">
  <form v-on:submit.prevent="addItem">
    <p>Add item<\/p>
    <p>Item name: <input type="text" required v-model="itemName"><\/p>
    <p>How many: <input type="number" v-model="itemNumber"><\/p>
    <p>
      Important?
      <label>
        <input type="checkbox" v-model="itemImportant">
        {{ itemImportant }}
      <\/label>
    <\/p>
    <button type="submit">Add item<\/button>
  <\/form>
  <hr>
  <p>Shopping list:<\/p>
  <ul>
    <li v-for="item in shoppingList">{{ item.name }}, {{ item.number }}<\/li>
  <\/ul>
<\/div>

<script src="https://unpkg.com/vue@3/dist/vue.global.js"><\/script>
<script>
const app = Vue.createApp({
  data() {
    return {
      itemName: null,
      itemNumber: null,
      itemImportant: false,
      shoppingList: [
        { name: 'Tomatoes', number: 5, important: false }
      ]
    };
  },
  methods: {
    addItem() {
      const item = {
        name: this.itemName,
        number: this.itemNumber,
        important: this.itemImportant
      };
      this.shoppingList.push(item);
      this.itemName = null;
      this.itemNumber = null;
      this.itemImportant = false;
    }
  }
});
app.mount('#app');
<\/script>

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

علامت گذاری «یافت شد» در لیست خرید

روی آیتم کلیک کن تا بین «پیدا شد» و «نشد» جابه جا شود. با v-show دو لیست می سازیم.

<div id="app">
  <form v-on:submit.prevent="addItem">
    <p>Add item<\/p>
    <p>Item name: <input type="text" required v-model="itemName"><\/p>
    <p>How many: <input type="number" v-model="itemNumber"><\/p>
    <button type="submit">Add item<\/button>
  <\/form>
  <p><strong>Shopping list:<\/strong><\/p>
  <ul id="ulToFind">
    <li v-for="item in shoppingList" v-on:click="item.found = !item.found" v-show="!item.found">{{ item.name }}, {{ item.number }}<\/li>
  <\/ul>
  <ul id="ulFound">
    <li v-for="item in shoppingList" v-on:click="item.found = !item.found" v-show="item.found">{{ item.name }}, {{ item.number }}<\/li>
  <\/ul>
<\/div>

<script src="https://unpkg.com/vue@3/dist/vue.global.js"><\/script>
<script>
const app = Vue.createApp({
  data() {
    return {
      itemName: null,
      itemNumber: null,
      shoppingList: [
        { name: 'Tomatoes', number: 5, important: false, found: false }
      ]
    };
  },
  methods: {
    addItem() {
      const item = {
        name: this.itemName,
        number: this.itemNumber,
        important: false,
        found: false
      };
      this.shoppingList.push(item);
      this.itemName = null;
      this.itemNumber = null;
    }
  }
});
app.mount('#app');
<\/script>

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

فرم پویا با v-model و v-show

در نمونه پیشرفته، فرم بر اساس انتخاب ها تغییر می کند. دسته را انتخاب کن، سپس آیتم و تعداد را بزن.

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

گام های عملی

  1. ورودی ها را بساز و با v-model وصل کن.
  2. روی فرم، submit.prevent بگذار تا رفرش نشود.
  3. متد اضافه کردن آیتم را پیاده کن و فرم را ریست کن.

جمع بندی سریع

  • v-model اتصال دوطرفه می دهد.
  • همه ورودی ها را یکدست مدیریت می کند.
  • با v-show فرم ها پویا می شوند.
  • submit.prevent جلوی رفرش می ایستد.

ادامه مسیر: سر بزن به فرم ها (Forms) و بایندینگ CSS برای تکمیل مسیر v-model.