→ درس المبتدئين Vue.js 1: المثال Vue
→ Vue.js للمبتدئين ، الدرس 2: سمات الربط
→ Vue.js الدرس 3: العرض الشرطي
→ Vue.js للمبتدئين الدرس 4: عرض القوائم
→ Vue .js للمبتدئين الدرس الخامس: معالجة الأحداث
→ Vue.js للمبتدئين الدرس 6: فئات وأنماط الربط
← Vue.js للمبتدئين الدرس 7: الخصائص المحسوبة
→ Vue.js للمبتدئين الدرس 8: المكونات
الغرض من الدرس
الهدف الأول من الدرس هو أن يكون لديك زر على بطاقة المنتج ، يؤدي النقر فوقه إلى زيادة عدد المنتجات في سلة التسوق.
الهدف الثاني هو تغيير صورة المنتج عند تحريك الماوس فوق أسماء ألوان متغيرات المنتج.
الكود الأولي
index.html
سيحتوي
ملف المشروع على الكود التالي:
<div id="app">
<div class="product">
<div class="product-image">
<img :src="image" />
</div>
<div class="product-info">
<h1>{{ product }}</h1>
<p v-if="inStock">In stock</p>
<p v-else>Out of Stock</p>
<ul>
<li v-for="detail in details">{{ detail }}</li>
</ul>
<div v-for="variant in variants" :key="variant.variantId">
<p>{{ variant.variantColor }}</p>
</div>
</div>
</div>
</div>
ها هو المحتوى
main.js
:
var app = new Vue({
el: '#app',
data: {
product: "Socks",
image: "./assets/vmSocks-green.jpg",
inStock: true,
details: ['80% cotton', '20% polyester', 'Gender-neutral'],
variants: [
{
variantId: 2234,
variantColor: "green"
},
{
variantId: 2235,
variantColor: "blue"
}
]
}
})
مهمة
نحتاج إلى زر لتعيين مستمع الحدث عند النقر فوقه. عند النقر ، يجب إطلاق طريقة تؤدي إلى زيادة عدد العناصر في سلة التسوق.
القرار
للبدء ، أضف ، إلى
main.js
الكائن data
، خاصية جديدة ترمز إلى عدد العناصر في سلة التسوق:
cart: 0
الآن ، في
index.html
، أضف عنصرًا <div>
يصف عربة التسوق. سيستخدم هذا العنصر علامة <p>
تعرض الرقم المخزن في الخاصية على الصفحة cart
:
<div class="cart">
<p>Cart({{ cart }})</p>
</div>
سننشئ أيضًا
index.html
زرًا في الكود يسمح لك بإضافة منتج إلى سلة التسوق:
<button v-on:click="cart += 1">Add to cart</button>
لاحظ هنا
cart
أننا نستخدم التوجيه لزيادة القيمة المخزنة فيه v-on
.
صفحة بها عربة تسوق وزر لإضافة عنصر إلى عربة التسوق
إذا نقرت على الزر الآن ، سيزداد عدد العناصر في سلة التسوق بمقدار 1.
كيف يعمل كل ذلك؟
دعنا نلقي نظرة على البناء المعروض هنا. يؤدي استخدام التوجيه إلى
v-on
إخبار Vue بأننا نريد الاستماع إلى الأحداث على الزر. ثم هناك نقطتان ، وبعد ذلك يتم الإشارة إلى الحدث المحدد الذي نهتم به. في هذه الحالة ، إنه حدثclick
. تحتوي علامات الاقتباس على تعبير يضيف 1 إلى القيمة المخزنة فيهcart
. يحدث هذا في كل مرة يتم فيها النقر فوق الزر.
هذا مثال بسيط ولكنه ليس واقعيًا تمامًا. بدلا من إحاطة التعبير
cart += 1
، دعنا نجعلها بحيث يؤدي النقر على الزر إلى استدعاء طريقة من شأنها زيادة القيمة المخزنة فيها cart
. هكذا تبدو:
<button v-on:click="addToCart">Add to cart</button>
كما ترى ، إليك
addToCart
اسم الطريقة التي سيتم استدعاؤها عند وقوع الحدث click
. لكننا لم نعلن عن الطريقة نفسها حتى الآن ، لذلك دعونا نفعل ذلك الآن من خلال تجهيز مثيل Vue بها.
يستخدم آلية مشابهة جدًا لتلك التي نستخدمها بالفعل لتخزين البيانات. وبالتحديد ، نحن نتحدث عن حقيقة أن الكائن الذي يحتوي على خيارات مستخدمة عند إنشاء مثيل Vue ، قد يكون له خاصية اختيارية مسماة باسم
methods
، والتي تحتوي على الكائن مع الأساليب. في حالتنا ، ستكون طريقة واحدة فقط - addToCart
:
methods: {
addToCart() {
this.cart += 1
}
}
الآن ، عندما نضغط على الزر ، يتم استدعاء الطريقة
addToCart
، مما يزيد من القيمة cart
المعروضة في العلامة <p>
.
دعنا نواصل تحليل ما يحدث هنا.
يستمع الزر إلى الأحداث
click
بفضل التوجيه v-on
الذي يستدعي الطريقة addToCart
. هذه الطريقة هي في خاصية methods
مثيل Vue. يحتوي جسم الوظيفة على تعليمات تضيف 1 إلى القيمة this.cart
. نظرًا لأنه this
يخزن مرجعًا إلى مكان تخزين بيانات مثيل Vue الذي نحن فيه ، تضيف الوظيفة 1 إلى القيمة cart
. A this.cart
هي نفس الخاصية cart
المعلنة في خاصية data
كائن الخيار.
إذا كتبنا للتو في جسم الدالة شيئًا مثل
cart += 1
ثم واجهنا رسالة خطأ cart is not defined
. هذا هو السبب في أننا نستخدم الإنشاء this.cart
والوصول cart
من مثيل Vue باستخدام this
.
ربما تتساءل الآن أننا نقوم الآن ببساطة بزيادة عدد العناصر في سلة التسوق ، لكننا لا نضيف العنصر نفسه إلى سلة التسوق. ربما نقوم بشيء خاطئ؟ هذا هو السؤال الصحيح. سنقوم بتنفيذ هذه الوظيفة لاحقًا في أحد البرامج التعليمية التالية.
والآن بعد أن تعلمنا أساسيات التعامل مع الأحداث في Vue ، دعنا نلقي نظرة على مثال أكثر تعقيدًا.
للبدء ، دعنا نوسع كائنات المصفوفة
variants
من الكائن data
بإضافة خاصية هناك variantImage
تخزن المسار إلى صورة متغير المنتج المطلوب. دعنا نعطي القسم المقابل من الملفmain.js
لهذا النموذج:
variants: [
{
variantId: 2234,
variantColor: "green",
variantImage: "./assets/vmSocks-green.jpg"
},
{
variantId: 2235,
variantColor: "blue",
variantImage: "./assets/vmSocks-blue.jpg"
}
],
الآن كل نوع منتج ، الجوارب الخضراء والزرقاء ، له صورته الخاصة.
مهمة
من الضروري ، عند تحريك الماوس فوق اسم لون متغير الجوارب ، في الحقل حيث يتم عرض صورة المنتج ، سيتم عرض الصورة
variantImage
الخاصة باللون المقابل.
القرار
هذا هو المكان الذي يصبح فيه التوجيه مفيدًا مرة أخرى
v-on
. لكن هذه المرة سوف نستخدم نسخة مختصرة من تدوينها ، والتي تبدو مثل @
. وسنستمع إلى الحدث mouseover
.
إليك الكود ذي الصلة في
index.html
:
<div v-for="variant in variants" :key="variant.variantId">
<p @mouseover="updateProduct(variant.variantImage)">
{{ variant.variantColor }}
</p>
</div>
لاحظ أننا نمرر الطريقة
updateProduct
في شكل وسيطة variant.variantImage
.
لنقم بإنشاء هذه الطريقة في
main.js
:
updateProduct(variantImage) {
this.image = variantImage
}
هذه الطريقة مشابهة جدًا للطريقة التي أنشأناها مؤخرًا لزيادة القيمة
cart
.
ولكن هنا نقوم بتحديث القيمة المخزنة في
image
. وبالتحديد image
، يتم تسجيل ما يتم تخزينه في variantImage
متغير المنتج الذي يحوم عليه مؤشر الماوس. يتم تمرير القيمة المقابلة إلى الوظيفة updateProduct
من معالج الحدث نفسه ، الموجود في index.html
:
<p @mouseover="updateProduct(variant.variantImage)">
بمعنى آخر ، الطريقة
updateProduct
جاهزة الآن ليتم variantImage
استدعاؤها بمعامل .
عندما يتم استدعاء هذه الطريقة ، يتم
variant.variantImage
تمريرها إليها كعرض variantImage
وتستخدم لتحديث القيمة المخزنة فيها this.image
. نحن ، عن طريق القياس مع البناء المدروس سابقًا this.cart
، يمكننا القول أن this.image
- هو نفسه image
. نتيجة لذلك ، image
يتم الآن تحديث القيمة المخزنة في ديناميكيًا وفقًا لبيانات متغير المنتج الذي يتم تحريكه فوقه.
بناء جملة ES6
هنا ، عند إنشاء الطرق ، استخدمنا التركيبات التالية:
updateProduct(variantImage) {
this.image = variantImage
}
هذه نسخة مختصرة من وصف الطريقة التي ظهرت في ES6. تبدو النسخة القديمة من كتابة مثل هذه الإنشاءات كما يلي:
updateProduct: function(variantImage) {
this.image = variantImage
}
ورشة عمل
قم بإنشاء زر والطريقة المقابلة لتقليل القيمة المخزنة فيه
cart
.
→ هنا نموذج يمكنك استخدامه لحل هذه المشكلة.
→ هنا حل المشكلة.
النتيجة
دعونا نلخص نتائج درس اليوم:
- يستخدم التوجيه لتنظيم استجابة عنصر للأحداث
v-on
. v-on
تبدو نسخة مختصرة من التوجيه مثل@
.- عند الاستخدام ،
v-on
يمكنك تحديد نوع الحدث للاستماع إليه:
- انقر
- تمرير الماوس
- أي حدث DOM
v-on
يمكن للتوجيه استدعاء الأساليب.v-on
يمكن أن تأخذ الطريقة التي تسمى بـ الحجج.-
this
, Vue. , , .
هل أكملت واجبك المنزلي لهذا الدرس؟
→ درس المبتدئين Vue.js 1: المثال Vue
→ Vue.js للمبتدئين ، الدرس 2: سمات الربط
→ Vue.js الدرس 3: العرض الشرطي
→ Vue.js للمبتدئين الدرس 4: عرض القوائم
→ Vue .js للمبتدئين الدرس الخامس: معالجة الأحداث
→ Vue.js للمبتدئين الدرس 6: فئات وأنماط الربط
← Vue.js للمبتدئين الدرس 7: الخصائص المحسوبة
→ Vue.js للمبتدئين الدرس 8: المكونات