2016-04-21 8 views
7

क्या Vue.js में ओवरराइडिंग विधि का उपयोग करना संभव है?Vue.js विरासत कॉल पेरेंट विधि

var SomeClassA = Vue.extend({ 
    methods: { 
     someFunction: function() { 
      // ClassA some stuff 
     } 
    } 
}); 

var SomeClassB = SomeClassA.extend({ 
    methods: { 
     someFunction: function() { 
      // CALL SomeClassA.someFunction 
     } 
    } 
}); 

मैं क्लासब कुछ कक्षा से क्लास कुछ समारोह को कॉल करना चाहता हूं। क्या यह भी संभव है?

उत्तर

13

नहीं, vue प्रत्यक्ष विरासत मॉडल के साथ काम नहीं करता है। जहां तक ​​मुझे पता है, आप A.extend एक घटक नहीं कर सकते हैं। यह माता-पिता के रिश्ते मुख्य रूप से प्रोप और घटनाओं के माध्यम से काम करते हैं।

1. पासिंग रंगमंच की सामग्री (अभिभावक-बच्चे)

var SomeComponentA = Vue.extend({ 
    methods: { 
     someFunction: function() { 
      // ClassA some stuff 
     } 
    } 
}); 

var SomeComponentB = Vue.extend({ 
    props: [ 'someFunctionParent' ], 
    methods: { 
     someFunction: function() { 
      // Do your stuff 
      this.someFunctionParent(); 
     } 
    } 
}); 

और SomeComponentA के खाके में:

<some-component-b someFunctionParent="someFunction"></some-component-b> 

2. mixins

हालांकि तीन समाधान कर रहे हैं

यदि यह आम कार्यक्षमता हैं जिन्हें आप अन्य स्थानों में उपयोग करना चाहते हैं, एक mixin का उपयोग कर अधिक मुहावरेदार हो सकता है:

var mixin = { 
    methods: { 
     someFunction: function() { 
      // ... 
     } 
    } 
}; 

var SomeComponentA = Vue.extend({ 
    mixins: [ mixin ], 
    methods: { 
    } 
}); 

var SomeComponentB = Vue.extend({ 
    methods: { 
     someFunctionExtended: function() { 
      // Do your stuff 
      this.someFunction(); 
     } 
    } 
}); 

3. माता-पिता रंगमंच की सामग्री (अभिभावक-बच्चे, बदसूरत)

// In someComponentB's 'someFunction': 
this.$parent.$options.methods.someFunction(...); 
कॉलिंग
+0

1. जब यह अंतिम उपाय की बात आती है तो यह बहुत अच्छा समाधान है, लेकिन यह बहुत एक्स्टेंसिबल नहीं है। 2. मैंने यहां मिक्सिन का उपयोग करने के बारे में सोचा है, लेकिन फ़ंक्शन नामों को बदलने की आवश्यकता या तो एक्स्टेंसिबल नहीं है। 3. क्या आप इसे भी काम कर सकते हैं !? http://jsfiddle.net/9s146cdr/1/। यह सबसे अच्छा शर्त होगा, अगर केवल यह सच था :) – MyFantasy512

+0

मैं वास्तव में # 3 का उपयोग करने की अनुशंसा नहीं करता हूं और मैंने केवल संदर्भ के लिए इसे शामिल किया है। अन्य दो vue के लिए अधिक मूर्खतापूर्ण हैं (विरासत आमतौर पर बहुत अधिक समझ में नहीं आता है, क्योंकि घटक ए एक सार वर्ग नहीं है बल्कि घटक बी की तुलना में विभिन्न जिम्मेदारियों के साथ डीओएम में एक मूल घटक है)। यदि आप विस्तारशीलता के बारे में कम सोचते हैं और घटक जिम्मेदारियों के बारे में अधिक सोचते हैं तो यह शायद मदद करता है। – nils

+0

आप # 3 का उपयोग नहीं कर सकते क्योंकि यह काम नहीं कर रहा है :) मैं _since घटक से सहमत नहीं हो सकता हूं ए घटक वर्ग नहीं है लेकिन घटक बी से भिन्न जिम्मेदारियों के साथ डीओएम में एक मूल घटक है क्योंकि मुझे याद आती है कक्षाएं, यह 'SomeAbstractComponentA' होना चाहिए' । मैं एम्बर से वू आया हूं, और मेरी राय में घटकों में विरासत कुछ भी गलत नहीं है। – MyFantasy512