2016-03-01 25 views
8

के भीतर मूल उदाहरण से डेटा तक पहुंच यह एक काफी बुनियादी सवाल जैसा प्रतीत होता है लेकिन मुझे एक निश्चित (या यहां तक ​​कि काम करने वाला) जवाब नहीं दिख रहा है।Vue.js - घटक

मैं अपने रूट उदाहरण है:

var vm = new Vue({ 
    el: '#app', 

    // Data 
    data: { 
     events: {} 
    }, 

    // Methods 
    methods: { 

    fetchEvents: function(){ 
     this.$http.get('/api/events').success(function(theseEvents) { 
     this.$set('events', theseEvents); 

     }).error(function(error) { 

     }); 

    } 
}, 

ready: function(){ 

    this.fetchEvents(); 

} 

}); 

और मैं एक अलग घटक जिसमें मैं घटनाओं जड़ उदाहरण में जमा हो जाती है बाहर की सूची बनाना चाहते है। फिलहाल ऐसा लगता है:

var EventsList = Vue.extend({ 

template: '<ul><li v-for="event in events"><h2>{{ event.title }}</h2><p>{{ event.body }}</p></li></ul>', 

data: function(){ 
    return { 
    events: {} 
    } 
}, 

methods: { 

    syncEvents: function(){ 
    this.$set('events', this.$parent.events); 
    } 

}, 

// When ready... 
ready: function(){ 
    this.syncEvents(); 
} 
} 

यह काम नहीं प्रतीत होता है। मैंने this.$root.events का कोई फायदा नहीं लिया है। इस बारे में जाने का सही तरीका क्या है? ध्यान रखें कि मैं रूट से डेटा का संदर्भ देना चाहता हूं, अपनी प्रतिलिपि के साथ प्रतिलिपि नहीं बनाऊंगा।

संपादित करें:

http://vuejs.org/guide/components.html#Props

मैं तुम्हें पारित: के लिए

var EventsList = Vue.extend({ 

template: '<ul><li v-for="event in events"><h2>{{ event.title }}</h2><p>{{ event.body }}</p></li></ul>', 

props: ['events'] 

} 
+0

क्या आपको यकीन है:

var EventsList = Vue.extend({ template: '<ul><li v-for="event in events"><h2>{{ event.title }}</h2><p>{{ event.body }}</p></li></ul>', data: function(){ return { } }, props: { events: Object, // assuming that your prop is an object }, } // Register the vue component globally, if you want to: Vue.component('eventlist', EventsList); 

जड़ Vue उदाहरण टेम्पलेट में, आप एक संपत्ति बच्चे घटक में events कहा जाता है के रूप में जड़ Vue उदाहरणों events पारित कर सकते हैं आप प्रोप के साथ दो-तरफा सिंक का उपयोग नहीं करना चाहते हैं? इस तरह, आपको दो घटकों को कसकर जोड़ना नहीं होगा। – nils

+0

क्षमा करें मैं इस के लिए बिल्कुल नया हूँ। क्या आप समझ सकते हैं कि आपका क्या मतलब है? मैंने घटनाओं को रूट इंस्टेंस में रखा क्योंकि मैं उन्हें लाइन के नीचे कई घटकों में उपयोग करना चाहता हूं। – Chris

+0

क्या वे घटक 'ईवेंट' को भी बदल देंगे या क्या यह केवल पढ़ने के लिए होगा? मैं एक सेकंड में समझाऊंगा। – nils

उत्तर

3

Using props, आप आसानी से एक ही डेटा माता-पिता से बच्चों को पारित कर सकते हैं । चूंकि मुझे नहीं पता कि आपने मूल उदाहरण और EventList को एक साथ कैसे जोड़ा है, मैं मानता हूं कि आपने इसे वैश्विक घटक के रूप में पंजीकृत किया है।

प्रलेखन राज्यों:

ध्यान दें कि एक वस्तु या किसी सरणी है अगर प्रोप नीचे पारित किया जा रहा है, यह संदर्भ द्वारा पारित कर दिया है। आप जिस बाध्यकारी प्रकार का उपयोग कर रहे हैं, उसके बावजूद बच्चे के अंदर ऑब्जेक्ट या ऐरे को स्वयं को म्यूट करना मूल स्थिति को प्रभावित करेगा।

तो जब आप इसे प्रोप के रूप में पास करते हैं तो आप अपने सभी घटकों में उसी ऑब्जेक्ट का उपयोग करेंगे।

var vm = new Vue({ 
    el: '#app', 

    // Data 
    data: { 
     events: {} 
    }, 

    // Methods 
    methods: { 

    fetchEvents: function(){ 
     this.$http.get('/api/events').success(function(theseEvents) { 
     this.$data.events = theseEvents; // You don't need to use $set here 

     }).error(function(error) { 

     }); 

    } 
}, 

ready: function(){ 

    this.fetchEvents(); 

} 

}); 

EventList:

<div class="app"> 
    <!-- events is passed using the :events prop --> 
    <eventlist :events="events"> 
    </eventlist> 
</div> 
1

है यही कारण है कि "प्रॉप्स" कर रहे हैं: रंगमंच की सामग्री का उपयोग करने की कोशिश कर, यहाँ सूची घटक है, जो भी है काम नहीं कर रहा है एक ऑब्जेक्ट/सरणी प्रोप के रूप में (आपका events डेटा निश्चित रूप से होगा), यह स्वचालित रूप से दो-तरफा सिंक हो रहा है - बच्चे में ईवेंट बदलें, वे माता-पिता में बदल दिए जाते हैं।

आप सरल मूल्यों (स्ट्रिंग, संख्याओं - जैसे ही event.name) पार कर लेते हैं रंगमंच की सामग्री के माध्यम से, आप स्पष्ट रूप से .sync संशोधक का उपयोग करने के लिए है: http://vuejs.org/guide/components.html#Prop_Binding_Types

+0

ठीक है मैंने अभी प्रोप पर कुछ पढ़ा है।ऐसा लगता है कि मुझे प्रोप को जोड़ना होगा: ['घटनाओं'] घटना के लिए टेम्पलेट के लिए सूची घटक? यह काम नहीं करता है ... – Chris

+0

सुनिश्चित करें कि आपने वैश्विक रूप से अपना घटक पंजीकृत किया है क्योंकि @nils इंगित करता है और यह भी सुनिश्चित करता है कि आप इसे पारित करते हैं: बच्चे को जहां घोषित किया जा रहा है TechyTimo