Vue Watchers

Vue Watchers শিখুন

Vue Watchers

একজন পর্যবেক্ষক এমন একটি পদ্ধতি যা একই নামের একটি ডেটা বৈশিষ্ট্য পর্যবেক্ষণ করে।

প্রতিবার ডেটা অ্যাট্রিবিউটের মান পরিবর্তন হলে একজন পর্যবেক্ষককে বরখাস্ত করা হয়।

কোনো নির্দিষ্ট ডেটা অ্যাট্রিবিউট মানের জন্য কোনো অ্যাকশনের প্রয়োজন হলে একজন প্রহরী ব্যবহার করুন।

The Watcher Concept

ওয়াচার্স হল Vue উদাহরণের চতুর্থ কনফিগারেশন বিকল্প যা আমরা শিখব। আমরা ইতিমধ্যে দেখেছি প্রথম তিনটি কনফিগারেশন বিকল্প হল 'ডেটা', 'পদ্ধতি' এবং 'গণনা করা'।

'ডেটা', 'পদ্ধতি' এবং 'কম্পিউটেড'-এর মতো, দর্শকদের Vue উদাহরণে একটি নির্দিষ্ট নাম রয়েছে: 'ঘড়ি'।

📝 Syntax

পর্যবেক্ষকদের সিনট্যাক্স:

const app = Vue.createApp({
  data() {
    ...
  },
  watch: {
    ...
  },
  computed: {
    ...
  },
  methods: {
    ...
  }
})

একজন পর্যবেক্ষক উপরের সবুজ এলাকায় নির্দেশিত একই নামের একটি ডেটা অ্যাট্রিবিউট নিরীক্ষণ করে।

আমরা কখনই পর্যবেক্ষক পদ্ধতি বলি না। এটি স্বয়ংক্রিয়ভাবে বলা হয় শুধুমাত্র যখন বৈশিষ্ট্যের মান পরিবর্তন হয়।

নতুন অ্যাট্রিবিউট মান সর্বদা পর্যবেক্ষক পদ্ধতিতে একটি ইনপুট আর্গুমেন্ট হিসাবে উপলব্ধ, এবং পুরানো মানও তাই।

🎯 Example

একটি <input type="range"> উপাদান একটি মানকে 'rangeVal'-এ পরিবর্তন করতে ব্যবহৃত হয়। ব্যবহারকারীকে 20 এবং 60 এর মধ্যে মান নির্বাচন করা থেকে বিরত রাখতে একটি প্রহরী ব্যবহার করা হয় যা অবৈধ বলে বিবেচিত হয়।

<input type="range" v-model="rangeVal">
<p>{{ rangeVal }}</p>

const app = Vue.createApp({
  data() {
    return {
      rangeVal: 70
    }
  },
  watch: {
    rangeVal(val){
      if( val>20 && val<60) {
        if(val<40){
          this.rangeVal = 20;
        }
        else {
          this.rangeVal = 60;
        }
      }
    }
  }
})

A Watcher with New and Old Values

নতুন অ্যাট্রিবিউট মান ছাড়াও, আগের অ্যাট্রিবিউটের মান স্বয়ংক্রিয়ভাবে পর্যবেক্ষক পদ্ধতিতে একটি ইনপুট আর্গুমেন্ট হিসাবে উপলব্ধ।

🎯 Example

'updatePos' পদ্ধতিতে মাউস পয়েন্টার এক্স-পজিশন 'xPos' রেজিস্টার করার জন্য আমরা একটি <div> এলিমেন্টে ক্লিক ইভেন্ট সেট করি। একজন পর্যবেক্ষক প্রহরী পদ্ধতিতে পুরানো এবং নতুন ইনপুট আর্গুমেন্ট ব্যবহার করে নতুন এক্স-পজিশন এবং আগেরটির মধ্যে পিক্সেলের পার্থক্য গণনা করে।

<div v-on:click="updatePos"></div>
<p>{{ xDiff }}</p>

const app = Vue.createApp({
  data() {
    return {
      xPos: 0,
      xDiff: 0
    }
  },
  watch: {
    xPos(newVal,oldVal){
      this.xDiff = newVal-oldVal
    }
  },
  methods: {
    updatePos(evt) {
      this.xPos = evt.offsetX
    }
  }
})

ইনপুট মিথ্যা থেকে সত্যে পরিবর্তিত হওয়ার সঠিক মুহুর্তে ব্যবহারকারীকে প্রতিক্রিয়া প্রদান করতে নতুন এবং পুরানো মানগুলিও ব্যবহার করা যেতে পারে:

🎯 Example

একটি <input> উপাদান থেকে মান একটি পর্যবেক্ষক আবদ্ধ হয়. যদি মানটিতে '@' থাকে তবে এটি একটি বৈধ ইমেল ঠিকানা হিসাবে বিবেচিত হয়৷ ব্যবহারকারী শেষ কী দিয়ে ইনপুটটি বৈধ, অবৈধ বা বৈধ কিনা তা জানানোর জন্য একটি প্রতিক্রিয়া পাঠ্য পায়।

<input type="email" v-model="inpAddress">
<p v-bind:class="myClass">{{ feedbackText }}</p>

const app = Vue.createApp({
  data() {
    return {
      inpAddress: '',
      feedbackText: '',
      myClass: 'invalid'
    }
  },
  watch: {
    inpAddress(newVal,oldVal) {
      if( !newVal.includes('@') ) {
        this.feedbackText = 'The e-mail address is NOT valid';
        this.myClass = 'invalid';
      }
      else if( !oldVal.includes('@') && newVal.includes('@') ) {
        this.feedbackText = 'Perfect! You fixed it!';
        this.myClass = 'valid';
      }
      else {
        this.feedbackText = 'The e-mail address is valid :)';
      }
    }
  }
})

Watchers vs. Methods

পর্যবেক্ষক এবং পদ্ধতি উভয়ই ফাংশন হিসাবে লেখা হয়, তবে বেশ কয়েকটি পার্থক্য রয়েছে:

Watchers vs. Computed Properties

পর্যবেক্ষক এবং গণনাকৃত বৈশিষ্ট্য উভয়ই ফাংশন হিসাবে লেখা হয়।

নির্ভরতা পরিবর্তিত হলে পর্যবেক্ষক এবং গণনাকৃত বৈশিষ্ট্য উভয়ই স্বয়ংক্রিয়ভাবে কল করা হয় এবং HTML থেকে কখনই কল করা হয় না।

এখানে কম্পিউটেড প্রোপার্টি এবং প্রহরীর মধ্যে কিছু পার্থক্য রয়েছে:

Watchers

একটি নির্দিষ্ট বৈশিষ্ট্য মান পরিবর্তিত হলে শুধুমাত্র মৃত্যুদন্ড কার্যকর করা হয়

Computed Properties

কোনো নির্ভরতা পরিবর্তন স্বয়ংক্রিয়ভাবে পুনরায় গণনা করা হয়

Usage

এইচটিএমএল-এ প্রহরী ব্যবহার করা হয় না, গণনা করা বৈশিষ্ট্যগুলি ডেটা হিসাবে ব্যবহৃত হয়

Dependencies

যদিও পর্যবেক্ষকরা শুধুমাত্র একটি সম্পত্তির উপর নির্ভর করে, গণনা করা বৈশিষ্ট্য একাধিক বৈশিষ্ট্যের উপর নির্ভর করতে পারে

Vue Exercises

এই টিউটোরিয়ালের পর্যবেক্ষককে 'রেঞ্জভ্যাল' ডেটা প্রপার্টি পরিবর্তন করার সময় 'গণনা' ডেটা বৈশিষ্ট্য একটি করে বৃদ্ধি করা উচিত।

কিভাবে প্রহরী বলা উচিত?

Fill in the missing watcher name:

<script>
  const app = Vue.createApp({
    data() {
      return {
        rangeVal: 70,
        count: 0
      }
    },
    watch: {
      ______() {
        this.count++
      }
    }
  })
  app.mount('#app')
</script>
rangeVal
✓ ঠিক আছে! পর্যবেক্ষক একই নামের ডেটা অ্যাট্রিবিউট পর্যবেক্ষণ করে, তাই 'রেঞ্জভাল' হল পর্যবেক্ষনের বৈশিষ্ট্য
count
✗ ভুল! 'গণনা' একটি বৈশিষ্ট্য যা পরিবর্তন করা হবে, একটি বৈশিষ্ট্য নয় যা পর্যবেক্ষণ করা হবে
incrementCount
✗ ভুল! প্রহরীদের অবশ্যই ডেটা সম্পত্তির নাম থাকতে হবে, কাস্টম পদ্ধতির নাম নয়
watchRangeVal
✗ ভুল! প্রহরী পদ্ধতিতে অবশ্যই পর্যবেক্ষণ করা ডেটা সম্পত্তির নাম থাকতে হবে, 'ঘড়ি' উপসর্গের প্রয়োজন নেই