Sales2 min read405 words

Vue.js: Communication between components

Burak Kaşıkcı

PlusClouds Author

Cloud & SaaS

Vue.js: Communication Between Components
Size

عند تطوير تطبيق باستخدام Vue.js، نقوم بفصل جميع الأجزاء إلى مكونات فردية، وبناء هيكل فوق ذلك. هذا لا يوفر لنا فقط هيكلًا أكثر تنظيمًا، بل يمنعنا أيضًا من كتابة نفس الكود عدة مرات أو إجراء نفس التعديلات في عشرات الأماكن عندما يكون هناك حاجة إلى تغيير.

بالطبع، هذا ليس خاصًا بـ Vue.js أو شيء مقترح هنا، وهناك مبدأ عام في البرمجيات يعرف باسم DRY (Don't Repeat Yourself) يتعلق بهذا الموضوع. هذا المبدأ هو أحد المبادئ الأساسية في البرمجيات ويدعو إلى تجنب تكرار الكود. (تم تسميته DRY وشرح بالتفصيل في كتاب "The Pragmatic Programmer").

من خلال الالتزام بهذا المبدأ والمنطق، نقوم بإنشاء مكونات في مشاريعنا، والتي تحتوي على بيانات ديناميكية، ونحتاج إلى تمرير هذه البيانات من المكونات الأم إلى المكونات الفرعية (من الأم إلى الفرعية)، من المكونات الفرعية إلى المكونات الأم (من الفرعية إلى الأم)، وبين المكونات ذات المستوى الأدنى (من الفرعية إلى الفرعية). دعونا نلقي نظرة على كيفية تنفيذ عمليات نقل البيانات هذه.

للاتصال بين الأم والفرعية: props

نستخدم بنية props عند نقل البيانات من المكون الأم إلى المكون الفرعي. يمكننا استخدام البيانات التي نرسلها عبر props في المكون الفرعي تمامًا مثل قيمة نعرفها داخل البيانات.

المكون الأم

 
// هنا، نقوم بتعيين قيمة ثابتة للعنوان.


// هنا، نرسل قيمة Title المعرفة في العنصر الخاص بالمكون الأم إلى قيمة العنوان المعرفة في المكون الفرعي.


يمكننا استخدامه كما يلي عند استلامه.

المكون الفرعي


للاتصال بين الفرعية والأم: $emit


لقد قمنا بنقل البيانات إلى الفرعية عبر props من الأم؛ هنا نحتاج إلى القيام بالعكس ودفع البيانات إلى الأعلى. لهذا، نستخدم بنية emit. إذا كنا بحاجة إلى تقديم مثال قصير، يمكننا استخدامه هكذا: this.$emit("result", item)
بالاستمرار من المثال أعلاه، سنحصل على النتيجة التالية؛

المكون الفرعي


لالتقاط هذه الإشارات في الأم، نستخدمها كـ @emitName أو v-on:emitName.
المكون الأم


للاتصال بين الفرعية والفرعية: event-bus


هنا، نظرًا لعدم وجود علاقة مباشرة مثل الأم والفرعية، نحتاج إلى استخدام وسيط، ونستخدم هنا instance eventbus. نقوم بإنشاء هذا الـ instance كـ Vue instance لا يرتبط بأي عنصر DOM، وسنستخدم هذا الـ instance فقط لنقل البيانات. يمكن لجميع المكونات إرسال الأحداث هنا، ويمكن لجميع المكونات التي تستمع هنا اتخاذ إجراء وفقًا للبيانات الواردة.

هنا، سنضيف أولاً instance eventBus إلى event-bus.js كما هو مذكور.

ثم سيكون كافيًا لنا استيراده في الصفحات التي سنستخدمها. لم نقم بتعريفه عالميًا، حيث سنستخدمه فقط بين مكونين.

في مثالنا الحالي، دعونا نقوم بتحديث العنوان في المكون A بالنقر على الزر في المكون B.

المكون الفرعي A

المكون الفرعي B

مع الطرق الثلاثة المذكورة أعلاه، يمكننا تنفيذ عمليات نقل البيانات بين المكونات.
ليدوشن

هل فريق المبيعات يلاحق العملاء المحتملين الخطأ؟

1.8B+ شركات — البحث دائمًا مجاني

اعثر على جهات الاتصال الخاصة بي →

No credit card · Cancel anytime

#There is no text provided for translation. Please provide the text you would like to be translated into English.

الأسئلة الشائعة

How do you pass data from a parent component to a child component using props?

Use the props option to pass data from parent to child. For example, you can set title='First title' or bind with :title='item.Title'; in the child, you can use the prop as if it were part of its own data.

How can a child component send data back to its parent in Vue.js?

A child can emit an event using this.$emit('eventName', payload). This allows the parent to receive data back through the event handler.

What syntax does the parent component use to listen to a child's emitted event?

The parent listens with the syntax @eventName or v-on:eventName in the child’s usage. This connects the emitted data to a handler in the parent.

What is an event bus and when would you use it in Vue?

An event bus is a dedicated Vue instance that is not bound to any DOM element, used as an intermediary for components that do not have a direct parent-child relationship. It enables components to publish and listen for events to share data.

How do you set up and use an event bus for inter-component communication?

Create an eventBus instance in event-bus.js as a Vue instance; import it into the components that need it rather than making it global. Components can emit and listen to events via the eventBus to coordinate actions.

What three methods of data transfer between Vue components are described in the article?

Props are used for parent to child data transfer, this.$emit is used for child to parent communication, and an event bus is used for child to child communication when there is no direct relationship.