Vue中的組件是可以被繼承和擴(kuò)展的,這樣可以使開發(fā)者的代碼更加簡(jiǎn)潔和可復(fù)用。在Vue中,繼承和擴(kuò)展都是通過使用父組件和子組件來實(shí)現(xiàn)的。
父組件是被擴(kuò)展和繼承的組件,子組件是繼承自父組件并添加新的功能的組件。在Vue中,我們可以使用extend方法來創(chuàng)建一個(gè)組件的子類。
// 創(chuàng)建一個(gè)父組件 var Parent = Vue.extend({ template: '{{msg}}', data: function(){ return { msg: 'Hello World!' } } }) // 創(chuàng)建一個(gè)子組件 var Child = Parent.extend({ created: function(){ console.log('child component was created') } }) // 使用子組件 new Child().$mount('#app')
在上面的代碼中,我們首先使用Vue.extend創(chuàng)建了一個(gè)名為Parent的組件,該組件包含一個(gè)模板和一個(gè)初始數(shù)據(jù)msg。接下來,我們使用Child.extend來創(chuàng)建一個(gè)Child子組件,并在該組件的created函數(shù)中進(jìn)行了額外處理。最后,我們通過new Child()實(shí)例來使用子組件,并將其掛載到DOM中。
除了使用extend方法之外,Vue還提供了一個(gè)mixins功能,可以將父組件和子組件中相同的功能提取到一個(gè)混合對(duì)象中進(jìn)行復(fù)用。
// 創(chuàng)建一個(gè)混合對(duì)象 var mixins = { methods: { sayHello: function(){ console.log('Hello!') } } } // 創(chuàng)建一個(gè)父組件 var Parent = Vue.extend({ mixins: [mixins], template: '{{msg}}', data: function(){ return { msg: 'Hello World!' } } }) // 創(chuàng)建一個(gè)子組件 var Child = Parent.extend({ methods: { sayBye: function(){ console.log('Bye!') } } }) // 使用子組件 var child = new Child() child.$mount('#app') child.sayHello() // Hello! child.sayBye() // Bye!
在上面的代碼中,我們首先創(chuàng)建了一個(gè)混合對(duì)象mixins,該混合對(duì)象中包含了一個(gè)方法sayHello。然后,我們?cè)趧?chuàng)建父組件Parent時(shí)將該混合對(duì)象作為參數(shù)傳入。接下來,我們創(chuàng)建一個(gè)子組件Child,并在該組件中添加了一個(gè)方法sayBye。最后,我們實(shí)例化Child組件并將其掛載到DOM中,并在實(shí)例中調(diào)用混合對(duì)象中的sayHello方法和子組件中的sayBye方法。
至此,我們已經(jīng)了解了Vue中組件的繼承和擴(kuò)展以及混合對(duì)象的使用,這些功能可以使我們的代碼更加簡(jiǎn)潔和可復(fù)用。在實(shí)際開發(fā)中,建議根據(jù)具體的業(yè)務(wù)需求合理利用這些功能。