Vue v-model Directive
প্লেইন জাভাস্ক্রিপ্টের তুলনায়, Vue-তে ফর্মগুলির সাথে কাজ করা সহজ কারণ ভি-মডেল উইজার্ড একইভাবে সমস্ত ধরণের ইনপুট উপাদানগুলির সাথে সংযোগ করে৷
ভি-মডেল ইনপুট উপাদানটি ভ্যালু ইনস্ট্যান্সে মান বৈশিষ্ট্য এবং ডেটা মানের মধ্যে একটি লিঙ্ক তৈরি করে। যখন আপনি ইনপুট পরিবর্তন করেন, ডেটা আপডেট হয় এবং যখন ডেটা পরিবর্তন হয়, ইনপুটটিও আপডেট হয় (টু-ওয়ে বাইন্ডিং)।
Two-way Binding
আগের পৃষ্ঠায় শপিং লিস্টের উদাহরণে যেমন দেখা গেছে, v-মডেল আমাদেরকে একটি দ্বি-মুখী বাইন্ডিং প্রদান করে, যার অর্থ হল ফর্ম ইনপুট উপাদানগুলি Vue ডেটা ইনস্ট্যান্স আপডেট করে এবং Vue পরিবর্তন ইনপুটগুলিকে ডেটা ইনস্ট্যান্সে আপডেট করে৷
নীচের উদাহরণটি ভি-মডেলের সাথে দ্বিমুখী আবদ্ধতা প্রদর্শন করে।
Example
দ্বি-মুখী বাইন্ডিং: ভিউ ডেটা অ্যাট্রিবিউট মান আপডেট হচ্ছে দেখতে ইনপুট ক্ষেত্রে লেখার চেষ্টা করুন। Vue ডেটা সম্পত্তির মান পরিবর্তন করতে কোডে সরাসরি লিখুন, কোডটি চালান এবং দেখুন কিভাবে ইনপুট ক্ষেত্র আপডেট করা হয়।
<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-মডেল দ্বি-মুখী বাইন্ডিং ফাংশনটি আসলে v-bind:value এবং v-on:input এর সমন্বয়ে অর্জন করা যেতে পারে:
- v-bind:Vue ইনস্ট্যান্স ডেটা থেকে ইনপুট উপাদান আপডেট করার জন্য মান,
- এবং v-on:ইনপুট ইনপুট থেকে Vue ইনস্ট্যান্স ডেটা আপডেট করতে।
কিন্তু v-মডেল ব্যবহার করা অনেক সহজ, তাই আমরা সেটাই করব।
A Dynamic Checkbox
আমরা পূর্ববর্তী পৃষ্ঠায় আমাদের কেনাকাটার তালিকায় একটি চেকবক্স যুক্ত করি যাতে একটি আইটেম গুরুত্বপূর্ণ কি না তা নির্দেশ করে৷
চেকবক্সের পাশে আমরা একটি পাঠ্য যোগ করি যা সর্বদা বর্তমান 'গুরুত্বপূর্ণ' অবস্থাকে প্রতিফলিত করে, যা 'সত্য' বা 'মিথ্যা'-তে পরিবর্তিত হতে পারে।
আমরা ব্যবহারকারীর মিথস্ক্রিয়া উন্নত করতে এই গতিশীল চেকবক্স এবং পাঠ্য যোগ করতে v-মডেল ব্যবহার করি।
আমাদের প্রয়োজন:
- Vue ইনস্ট্যান্স ডেটা প্রপার্টিতে 'গুরুত্বপূর্ণ'-এর একটি বুলিয়ান মান
- একটি চেকবক্স যেখানে ব্যবহারকারী আইটেমটি গুরুত্বপূর্ণ কি না তা পরীক্ষা করতে পারে
- একটি গতিশীল প্রতিক্রিয়া পাঠ্য যেখানে ব্যবহারকারী আইটেমটি গুরুত্বপূর্ণ কিনা তা দেখতে পারে৷
নিচে 'গুরুত্বপূর্ণ' বৈশিষ্ট্যটি কেনাকাটার তালিকা থেকে বিচ্ছিন্ন দেখতে কেমন তা দেখায়।
Example
চেকবক্স পাঠকে গতিশীল করা হয়েছে যাতে পাঠ্যটি বর্তমান চেকবক্স ইনপুট মান প্রতিফলিত করে।
<div id="app">
<form>
<p>
Important item?
<label>
<input type="checkbox" v-model="important">
{{ important }}
</label>
</p>
</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">
{{ important }}
</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,
important: false,
shoppingList: [
{ name: 'Tomatoes', number: 5, important: false }
]
}
},
methods: {
addItem() {
let 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>
Mark Found Items in The Shopping List
আসুন একটি ফাংশন যোগ করি যা শপিং তালিকায় যোগ করা আইটেমগুলিকে পাওয়া হিসাবে চিহ্নিত করে।
আমাদের প্রয়োজন:
- ক্লিক করা আইটেমের অবস্থা 'পাওয়া'তে পরিবর্তন করতে এবং আইটেমটিকে দৃশ্যত সরাতে এবং আন্ডারলাইন করতে CSS এর সাথে এটি ব্যবহার করুন
- তালিকা আইটেম প্রতিক্রিয়া করতে ক্লিক করুন
আমরা খুঁজে পাওয়া সমস্ত আইটেমগুলির সাথে একটি তালিকা তৈরি করি এবং পাওয়া আইটেমগুলিকে আন্ডারলাইন করে একটি তালিকা তৈরি করি৷ আপনি প্রকৃতপক্ষে প্রথম তালিকায় সমস্ত আইটেম এবং দ্বিতীয় তালিকায় সমস্ত আইটেম রাখতে পারেন এবং প্রথম বা দ্বিতীয় তালিকায় আইটেমটি দেখানো হবে কিনা তা নির্ধারণ করতে Vue ডেটা অ্যাট্রিবিউট 'found' সহ v-show ব্যবহার করতে পারেন।
Example
কেনাকাটার তালিকায় আইটেমগুলি যোগ করার পরে, আপনি আইটেমগুলি খুঁজে পাওয়ার পরে ক্লিক করে কেনাকাটা করার ভান করতে পারেন। আপনি যদি ভুলবশত কোনো আইটেমটিতে ক্লিক করেন, তাহলে 'নট ফাউন্ড' তালিকায় আইটেমটি নিতে আপনি আবার ক্লিক করতে পারেন।
<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">
{{ important }}
</label>
</p>
<button type="submit">Add item</button>
</form>
<p><strong>Shopping list:</strong></p>
<ul id="ulToFind">
<li v-for="item in shoppingList"
v-bind:class="{ impClass: item.important }"
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-bind:class="{ impClass: item.important }"
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,
important: false,
shoppingList: [
{ name: 'Tomatoes', number: 5, important: false, found: false }
]
}
},
methods: {
addItem() {
let item = {
name: this.itemName,
number: this.itemNumber,
important: this.itemImportant,
found: false
}
this.shoppingList.push(item)
this.itemName = null
this.itemNumber = null
this.itemImportant = false
}
}
})
app.mount('#app')
</script>
Use v-model to make The Form Itself Dynamic
আপনি একটি ফর্ম তৈরি করতে পারেন যেখানে গ্রাহক একটি মেনু থেকে অর্ডার করতে পারেন। গ্রাহকের সুবিধার জন্য, গ্রাহক পানীয় অর্ডার করার পরেই আমরা পানীয় বেছে নেওয়ার প্রস্তাব দিই। এটি যুক্তি দেওয়া যেতে পারে যে গ্রাহককে একবারে সমস্ত মেনু আইটেম অফার করার চেয়ে এটি ভাল। এই উদাহরণে আমরা ফর্মটিকে গতিশীল করতে ভি-মডেল এবং ভি-শো ব্যবহার করি।
আমাদের প্রয়োজন:
- সংশ্লিষ্ট ইনপুট ট্যাগ এবং একটি 'অর্ডার' বোতাম সহ একটি ফর্ম।
- 'ডিনার', 'ড্রিংক' বা 'ডেজার্ট' নির্বাচন করতে রেডিও-বোতাম।
- একটি বিভাগ নির্বাচন করার পরে, সেই বিভাগের সমস্ত আইটেমের সাথে একটি ড্রপডাউন মেনু প্রদর্শিত হবে।
- যখন একটি আইটেম নির্বাচন করা হয় তখন আপনি এটির একটি ছবি দেখতে পারেন এবং অর্ডারে কতগুলি যোগ করতে হবে তা চয়ন করতে পারেন৷ অর্ডারে আইটেম যোগ করা হলে ফর্মটি রিসেট করা হয়।
Example
এই ফর্মটি গতিশীল। এটি ব্যবহারকারীর পছন্দের উপর ভিত্তি করে পরিবর্তিত হয়। অর্ডার বোতামটি দৃশ্যমান হওয়ার আগে এবং ব্যবহারকারী এটি অর্ডার করতে পারেন, ব্যবহারকারীকে প্রথমে বিভাগ, তারপর পণ্য এবং কতগুলি নির্বাচন করতে হবে।
Vue Exercises
দয়া করে সঠিক কোড প্রদান করুন যাতে ডিফল্ট ব্রাউজার রিফ্রেশ জমা দেওয়ার সময় ব্লক করা হয়।
এছাড়াও, কোড প্রদান করুন যাতে ইনপুট ক্ষেত্রের মানগুলি Vue ডেটা ইনস্ট্যান্স বৈশিষ্ট্য 'itemName' এবং 'itemNumber'-এর সাথে দ্বিমুখী আবদ্ধ থাকে।
Fill in the missing code:
<form v-on:_______="addItem">
<p>Add item</p>
<p>
Item name:
<input type="text" required _______="itemName">
</p>
<p>
How many:
<input type="number" _______="itemNumber">
</p>
<button type="submit">Add item</button>
</form>