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

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

$watch() ($watch())

متد $watch() یک «واچر (Watcher)» می سازد. واچر یعنی گوش دادن به تغییرات داده. سپس هنگام تغییر، یک کالبک اجرا می شود. این کار مثل مراقب کلاس است. هر وقت وضعیت عوض شد، خبر می دهد.

تعریف و کاربرد متد watch در Vue

$watch() یک منبع را مشاهده می کند و روی تغییر، کالبک را اجرا می کند. این متد یک تابع توقف برمی گرداند. با آن می توان واچر را خاموش کرد. گزینه های deep، immediate و flush هم وجود دارند. deep یعنی دنبال کردن تغییرات عمیق شیء. immediate یعنی اجرای فوری کالبک پس از ساخت واچر.

مثال 1: واچر ساده در mounted

هر بار value تغییر کند، یک پیام در لیست نتایج ثبت می شود.

<script>
export default {
  mounted() {
    this.$watch('value', function() {
      this.results.push('$watch() method');
    });
  }
};
<\/script>

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

مثال 2: دریافت مقدار جدید و قبلی

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

<script>
export default {
  data() {
    return {
      value: 4,
      results: []
    };
  },
  mounted() {
    this.$watch('value', function(newVal, oldVal) {
      this.results.push('Old value: ' + oldVal + ', new value: ' + newVal);
    });
  }
};
<\/script>

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

مثال 3: گزینه های deep و immediate

با deep:true تغییرات داخل شیء هم دیده می شود. با immediate:true کالبک بلافاصله پس از ساخت اجرا می شود.

<script>
export default {
  data() {
    return {
      value: {
        owner: 'Stuart',
        hobbies: ['Bird watching']
      },
      watchMessages: []
    };
  },
  mounted() {
    this.$watch('value', function(newVal, oldVal) {
      this.watchMessages.push('watcher triggered');
    }, {
      deep: true,
      immediate: false
    });
  }
};
<\/script>

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

گام های عملی

  1. منبع مشاهده را مشخص کن؛ مثلاً 'value'.
  2. کالبک را بنویس و کاری انجام بده.
  3. در صورت نیاز، از تابع توقف استفاده کن.

نکته: مسیرهای نقطه ای مانند 'value.country' هم پشتیبانی می شوند. برای چند مقدار، یک تابع منبع بده.

لینک ها و ادامه مطالعه

برای زمان بندی رندر، $nextTick() را ببین. برای دسترسی به عناصر، $refs مفید است. همین طور صفحه واچرها در آموزش Vue را مطالعه کن.

جمع بندی سریع

  • $watch() تغییرات داده را رصد می کند.
  • تابع توقف برمی گرداند.
  • deep برای تغییرات عمیق شیء است.
  • immediate کالبک را فوری اجرا می کند.