混入:把多个组件中,公共的代码抽取,如data、methods、生命周期钩子,然后使用mixins继承。
01-混入mixin.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Document</title>
</head>
<body>
<!--
混入 mixin => js混入式继承
作用 : 共享功能
混入对象: data、methods......
-->
<div id="app">
<one></one>
<two></two>
</div>
<script src="./vue.js"></script>
<script>
// 准备一个混入对象
const hello = {
methods: {
sayHello() {
console.log('大家好, 我系' + this.name)
}
}
}
Vue.component('one', {
mixins: [hello],
data() {
return {
name: '春'
}
},
template: `<div @click='sayHello'> 子组件 one : </div>`
})
Vue.component('two', {
mixins: [hello],
data() {
return {
name: '马'
}
},
template: `<div @click='sayHello'> 子组件 two: </div>`
})
const vm = new Vue({
el: '#app',
data: {}
})
</script>
</body>
</html>
02-混入-重名.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Document</title>
</head>
<body>
<!--
混入 mixin => js => 混入式继承
作用 : 共享功能
混入对象 ( data methods ,,,,)
-->
<div id="app">
<one></one>
<two></two>
</div>
<script src="./vue.js"></script>
<script>
// 准备一个混入对象
const hi = {
methods: {
sayHello() {
console.log('大家好,我系' + this.name)
}
}
}
Vue.component('one', {
// 【就这个例子来说,没必要把 hi混入进来,因为hi里面只有一个sayHello方法,而这个组件里自己写了sayHello方法】
mixins: [hi],
data() {
return {
name: '春'
}
},
template: `<div @click='sayHello'> 子组件 one : </div>`,
// 【混入的属性可以和组件的属性重复,两者会合并】
methods: {
// (1)自己组件内部有同名的方法时,就执行自己的方法;(2)需要mixins的的方法,就继承,不需要就重写
sayHello() {
console.log('测试')
}
}
})
Vue.component('two', {
mixins: [hi],
data() {
return {
name: '马'
}
},
template: `<div @click='sayHello'> 子组件 two: </div>`
})
const vm = new Vue({
el: '#app',
data: {}
})
</script>
</body>
</html>