<template> <div> <p>{{ aData }}</p> <p>{{ commonData }}</p> <button @click="aMethod">aMethod</button> <button @click="commonMethod">commonMethod</button> </div> </template> <script> export default { data() { return { aData: '組件A的數據', commonData: '公共的數據' } }, methods: { aMethod() { console.log('A的方法') }, commonMethod() { console.log('公共的方法') } }, mounted() { console.log('A-mounted') console.log('公共的mounted') } } </script>
B組件:vue
<template> <div> <p>{{ bData }}</p> <p>{{ commonData }}</p> <button @click="bMethod">bMethod</button> <button @click="commonMethod">commonMethod</button> </div> </template> <script> export default { data() { return { bData: '組件B的數據', commonData: '公共的數據' } }, methods: { bMethod() { console.log('B的方法') }, commonMethod() { console.log('公共的方法') } }, mounted() { console.log('B-mounted') console.log('公共的mounted') } } </script>
能夠看到,A、B組件中的commonData屬性、commonMethod方法、mounted中打印的語句均可以抽出來:ide
在src下新建mixin/index.js:spa
export default {
data() {
return {
commonData: '公共的數據'
}
},
methods: {
commonMethod() {
console.log('公共的方法')
}
},
mounted() {
console.log('公共的mounted')
}
}
在A組件中引入mixin,此時將公共部分的內容刪除和原來的結果同樣:插件
<template> <div> <p>{{ aData }}</p> <p>{{ commonData }}</p> <button @click="aMethod">aMethod</button> <button @click="commonMethod">commonMethod</button> </div> </template> <script> import mixin from '../mixin' export default { data() { return { aData: '組件A的數據' } }, methods: { aMethod() { console.log('A的方法') } }, mounted() { console.log('A-mounted') }, mixins: [mixin] } </script>
B組件中同理,可是若是說B組件中和mixin傳來的有相同數據,B組件中的數據優先級高:ip
<template> <div> <p>{{ bData }}</p> <p>{{ commonData }}</p> <button @click="bMethod">bMethod</button> <button @click="commonMethod">commonMethod</button> </div> </template> <script> import mixin from '../mixin' export default { data() { return { bData: '組件B的數據', commonData: '公共的數據11' } }, methods: { bMethod() { console.log('B的方法') }, commonMethod() { console.log('公共的方法11') } }, mounted() { console.log('B-mounted') console.log('公共的mounted11') }, mixins: [mixin] } </script>
export default { // new Vue()中的配置項均可以在這裏加 data(){ return{ title:"我是額外提供的一個屬性" } }, created() { console.log("我是一個buff") } }