<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") } }