मेरे पास एक अभिभावक/बाल घटक सेटअप है जहां माता-पिता सर्वर से डेटा लोड कर रहा है और इसे प्रोप के माध्यम से बच्चों को पास कर रहा है। बच्चे में मैं एक jQuery कैलेंडर को तत्काल प्राप्त करना चाहता हूं जिसमें यह माता-पिता से प्राप्त कुछ डेटा के साथ होता है।VueJs बाल घटक प्रोप तुरंत अद्यतन नहीं कर रहा है
कैलेंडर सेट करने से पहले डेटा की प्रतीक्षा करने के लिए, मैंने माता-पिता में एक ईवेंट प्रसारित किया कि मेरे पास बच्चे में ईवेंट श्रोता सेटअप है।
श्रोता को बच्चे में निकाल दिया जा रहा है लेकिन यदि मैं this.$log('theProp')
, यह अपरिभाषित है। हालांकि, अगर मैं VueJs devtools के साथ घटकों का निरीक्षण करता हूं, तो मूल/बाल संबंध वहां होता है और इस दौरान बच्चे को प्रोप प्राप्त हुआ है।
प्रोप को बच्चे को गतिशील प्रोप :the-prop="theProp"
के रूप में परिभाषित किया गया है। चूंकि बच्चे को अंत में प्रोप प्राप्त होता है, इसलिए मुझे लगता है कि मेरा सेटअप सही है लेकिन कुछ प्रकार की देरी होती है। अभिभावक अजाक्स कॉल के रिटर्न फ़ंक्शन में प्रोप सेट करता है और फिर: यह काम कर रहा है, बस थोड़ी देर के साथ ऐसा लगता है।
मैंने बच्चे में प्रोप पर watch
श्रोता पंजीकरण करने का भी प्रयास किया ताकि मैं कैलेंडर सेट कर सकूं और सुनिश्चित कर सकूं कि प्रोप वहां है। हालांकि, घड़ी श्रोता आग लगती है, लेकिन this.$log('theProp')
अभी भी अपरिभाषित है।
यदि मैं प्रसारण कॉल के साथ डेटा पास करता हूं, जैसे this.$broadcast('dataLoaded', theData)
बच्चे को यह ठीक लगता है। लेकिन ऐसा लगता है कि मैं मूल रूप से अपने स्वयं के प्रोप हैंडलर का निर्माण कर रहा हूं।
मैं कोई कोड पोस्ट नहीं कर रहा हूं क्योंकि घटक बड़े हैं और VueJs devtools मुझे बता रहे हैं कि माता-पिता/बच्चे की स्थिति काम कर रही है।
क्या मुझे कुछ जानकारी याद आ रही है? माता-पिता में मूल्य निर्धारित करने और बच्चे को प्राप्त करने के बीच थोड़ी देर हो रही है? बच्चे में अभिभावक डेटा की प्रतीक्षा करने का उचित तरीका क्या होगा?
आम तौर पर, जब आप टेम्पलेट में डेटा को केवल प्रस्तुत कर रहे होते हैं, तो डेटा टेम्पलेट से बाध्य होने के बाद से कोई फर्क नहीं पड़ता। लेकिन इस मामले में, मुझे कैलेंडर सेट अप करने के लिए वास्तव में डेटा की आवश्यकता है या यह गलत होगा।
धन्यवाद।
संपादित करें 1: https://jsfiddle.net/dr3djo0u/1/ यह पुष्टि करते हैं कि डेटा तुरंत प्रसारण के बाद उपलब्ध नहीं है लगता है: यहाँ एक jsfiddle है। हालांकि, वॉचर काम करता है, हालांकि मैं लगभग कसम खाता हूं कि कभी-कभी this.$log('someData')
undefined
लौटाता है जब मैं उस टेस्टकेस को सेटअप करता हूं।
लेकिन मुझे लगता है कि मेरी समस्या कहीं और हो सकती है, मैं आज रात देखूंगा, मेरे पास अभी परियोजना नहीं है।
संपादित करें 2: ने कुछ और परीक्षण किए। मेरी समस्या यह थी कि ए) ईवेंट श्रोताओं को तत्काल डेटा प्राप्त नहीं होता है और बी) route.data
कॉलबैक में कैलेंडर को init करने का भी प्रयास कर रहा था अगर someData
पहले से ही था (उदाहरण के लिए जब माता-पिता से आ रहा है), लेकिन उस मार्ग कॉलबैक को कॉल किया जाता है घटक तैयार होने से पहले, इसलिए यह वहां काम नहीं कर रहा था।
मेरे समाधान अब है यह:
// works when the child route is loaded directly and parent finishes loading someData
watch: {
someData() {
this.initCalendar();
}
},
// works when navigating from parent (data already loaded)
ready() {
if (this.someData && this.someData.length) {
this.initCalendar()
}
}
हाय आप एक प्रदान कर सकते हैं इस मुद्दे को पुन: उत्पन्न करने के लिए सरल कोड उदाहरण? – Nora
यदि आप एक चर देख रहे हैं और 'घड़ी' के अंदर उसका मान अपरिभाषित है, तो वास्तव में इसे अपरिभाषित करने के लिए कुछ सेट कर रहा है। –
आपकी टिप्पणियों के लिए धन्यवाद। मेरे प्रश्नों को अपडेट किया गया जो मैंने पाया। – Chris