मैं vue.js की खोज कर रहा हूं और इस बारे में कोई प्रश्न है कि एक निश्चित समस्या को कैसे संबोधित किया जा सकता है। (देशी नियंत्रण के साथ छिपा हुआ)VueJS असंबद्ध (माता-पिता/बच्चे के रूप में) घटकों से कनेक्ट
<div class="container">
<div class="stage">
<map :current-time="currentTime" :recording="recording"></map>
<player :track="track" :current-time="currentTime"></player>
</div>
<control-panel :current-time="currentTime"></control-panel>
</div>
असल में, <player>
घटक है कि अंदर <video>
तत्व निर्दिष्ट ट्रैक लोड होगा:
मेरे जड़ घटक निम्न टेम्पलेट है। इस प्रकार, यह वास्तव में एप्लिकेशन की स्थिति को ड्राइव करेगा क्योंकि वीडियो (वर्तमान समय, प्लेबैक स्थिति इत्यादि) के माध्यम से खेलता है। हालांकि, <control-panel>
में स्क्रब बार और बटन हैं जो वीडियो स्थिति (प्ले/पॉज़, तलाश) को निर्देशित करते हैं। जाहिर है, घटकों में से एक में इस सामान्य स्थिति को बदलने से दूसरे दो घटकों को प्रभावित किया जाएगा (मानचित्र वर्तमान समय के अनुसार भी प्रगति करेगा)।
हालांकि, मुझे आश्चर्य है कि यह अधिक समझ में आएगा और क्या वे घटकों के संदर्भ प्रदान करने का समर्थन करते हैं ताकि मैं <player>
के संदर्भ में प्रदान कर सकूं ताकि यह सीधे राज्य परिवर्तन ले सके।
या इसे वैश्विक स्तर पर पारित होने वाले बच्चों या घटना-प्रसारण मार्ग में किया जाना चाहिए? ठीक होने से पहले, एक उदाहरण पर विचार करें जहां दो <player>
एस और दो <control-panel>
एस हैं जो पदानुक्रमित नहीं हैं लेकिन एक पैनल ए प्लेयर ए और पैनलबी के साथ पैनलबी के साथ काम करता है। इस मामले में, मुझे लगता है कि प्रसारण विकल्प तालिका से गिर जाता है, सही?
किसी भी सुझाव का स्वागत है विशेष रूप से इसलिए क्योंकि मैं सिर्फ वू सीख रहा हूं।
अद्यतन 1
तो Vue से अधिक परिचित एक सा हो रही है और समुदाय से वापस सुनने के बाद, मुझे लगता है कि मैं <player>
और <control-panel>
एक साथ सिंक्रनाइज़ करने के लिए एक चतुर समाधान के साथ आ गए हैं। निम्नलिखित मेरे मार्कअप परिवर्तन:
<div class="container">
<div class="stage">
<map :current-time="currentTime" :recording="recording"></map>
<player :track="track" :current-time="currentTime" v-ref:player></player>
</div>
<control-panel :current-time="currentTime" v-ref:player-controls :player="$refs.player"></control-panel>
</div>
सूचना <player>
और <control-panel>
को v-ref
विशेषताओं के अलावा के साथ ही बाद में :player="$refs.player"
विशेषता। यह मुझे एक दूसरे से तार्किक रूप से एक साथ बांधने की अनुमति देता है। मेरे सिर में, नियंत्रण कक्ष के लिए यह समझ में आता है कि यह कौन जानता है या यह किस पर नियंत्रण कर रहा है। मैं इसे आगे परीक्षण करने जा रहा हूं लेकिन, अभी के लिए, यह काम करता प्रतीत होता है।
<map>
को एक साथ जोड़ने के लिए, मैं प्रसारण का उपयोग कर समाप्त कर दूंगा या बस दो-तरफा currentTime
<control-panel>
द्वारा अपडेट किया जाएगा। जैसा कि मैं जाता हूं, मैं इस पोस्ट को अपडेट कर दूंगा और किसी भी उत्तर से अलग होने पर, सही उत्तर को चिह्नित कर सकता हूं या अपना खुद का पोस्ट करूंगा।
अद्यतन 2
नीचे मेरा उत्तर पढ़ें। मैं नीचे दिए गए दृष्टिकोण का उपयोग करके सफलतापूर्वक अपने मुद्दे को हल करने में सक्षम हूं।
'$ प्रसारण 'और' $ प्रेषण 'अभी भी' प्रोपर्स ' –
के माध्यम से घटकों को आईडी से गुजरकर कई खिलाड़ियों के साथ काम कर सकता है। उस दृष्टिकोण के साथ समस्या यह है कि प्लेयर और नियंत्रण को उनके लिए कार्य करने के लिए आईडी की आवश्यकता होगी। हालांकि, वे संभावित रूप से स्वतंत्र घटक हैं। यदि मैं उन्हें इस तरह कार्यान्वित करता हूं, तो एक खिलाड़ी घटक को उत्पन्न करने के लिए माता-पिता को एक आईडी प्रदान करने की आवश्यकता होगी (क्योंकि उस आईडी को दोनों को प्रदान करना होगा ताकि वे जान सकें कि कौन से संदेश फ़िल्टर करना है)। क्या यह आम तौर पर सभी एमवीवीएम ढांचे के साथ एक समस्या है? मेरा मतलब है, मुझे प्यार है कि मैं इस गतिशील बाध्यकारी और सामान कर सकता हूं लेकिन कभी-कभी, मुझे पूरी तरह से मैन्युअल नियंत्रण की आवश्यकता होती है और ऐसा लगता है कि यह वू मिश्रण या सादा जेएस के साथ प्रतिक्रिया करने के लिए सीधे आगे नहीं है। – Vadym