Vue पैटर्न propsनीचे और eventsऊपर है। यह सरल लगता है, लेकिन कस्टम घटक लिखते समय भूलना आसान है।
Vue 2.2.0 के रूप में आप वी-मॉडल ( कम्प्यूटेड गुणों के साथ ) का उपयोग कर सकते हैं । मैंने पाया है कि यह संयोजन घटकों के बीच एक सरल, स्वच्छ और सुसंगत इंटरफ़ेस बनाता है:
propsआपके घटक में कोई भी प्रतिक्रियाशील रहता है (अर्थात, इसका क्लोन नहीं है और न ही इसे watchस्थानीय प्रतिलिपि को अपडेट करने के लिए फ़ंक्शन की आवश्यकता होती है जब परिवर्तन का पता लगाया जाता है)।
- परिवर्तन स्वचालित रूप से जनक के लिए उत्सर्जित होते हैं।
- घटकों के कई स्तरों के साथ इस्तेमाल किया जा सकता है।
एक गणना की गई संपत्ति सेटर और गेट्टर को अलग-अलग परिभाषित करने की अनुमति देती है। यह Taskघटक को निम्नानुसार फिर से लिखने की अनुमति देता है:
Vue.component('Task', {
template: '#task-template',
props: ['list'],
model: {
prop: 'list',
event: 'listchange'
},
computed: {
listLocal: {
get: function() {
return this.list
},
set: function(value) {
this.$emit('listchange', value)
}
}
}
})
मॉडल संपत्ति परिभाषित करता है जो propसाथ जुड़ा हुआ है v-modelजो घटना, और परिवर्तन पर उत्सर्जित कर दिया जाएगा। आप इस घटक को माता-पिता से इस प्रकार कह सकते हैं:
<Task v-model="parentList"></Task>
listLocalगणना की गई संपत्ति घटक के भीतर एक साधारण गेट्टर और सेटर इंटरफेस प्रदान करती है (इसे निजी चर होने की तरह सोचें)। भीतर #task-templateआप रेंडर कर सकते हैं listLocalऔर यह प्रतिक्रियाशील रहेगा (यानी, यदि parentListपरिवर्तन यह Taskघटक को अपडेट करेगा )। आप listLocalसेटर को कॉल करके भी म्यूट कर सकते हैं (उदाहरण के लिए this.listLocal = newList) , और यह माता-पिता के लिए परिवर्तन का उत्सर्जन करेगा।
इस पैटर्न के बारे में बहुत अच्छी बात यह है कि आप (का उपयोग कर ) के listLocalएक बच्चे के घटक को पास कर सकते हैं , और बच्चे के घटक से परिवर्तन शीर्ष स्तर के घटक को प्रचारित करेंगे।Taskv-model
उदाहरण के लिए, मान लें कि हमारे पास EditTaskकार्य डेटा में कुछ प्रकार के संशोधन करने के लिए एक अलग घटक है। उसी v-modelऔर गणना किए गए गुण पैटर्न का उपयोग करके हम listLocalघटक (उपयोग v-model) को पास कर सकते हैं :
<script type="text/x-template" id="task-template">
<div>
<EditTask v-model="listLocal"></EditTask>
</div>
</script>
यदि EditTaskएक परिवर्तन का उत्सर्जन करता है तो यह उचित रूप से कॉल set()करेगा listLocalऔर इस तरह घटना को शीर्ष स्तर पर प्रचारित करेगा। इसी तरह, EditTaskघटक अन्य बाल घटकों (जैसे फार्म तत्व) का उपयोग करके भी कॉल कर सकता है v-model।