基本用法
- 通过Mixin技术,组件的复用性可以得到进一步的提高:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| <body> <div id="Application"> <my-com1 title="组件1"></my-com1> <my-com2 title="组件2"></my-com2> <my-com3 title="组件3"></my-com3> </div>
<script> const App = Vue.createApp({});
const com1 = { props: ['title'], template: ` <div style="border:red solid 2px;"> {{ title }} </div> ` };
const com2 = { props: ['title'], template: ` <div style="border:blue solid 2px;"> {{ title }} </div> ` };
const com3 = { props: ['title'], template: ` <div style="border:green solid 2px;"> {{ title }} </div> ` };
// 注册组件 App.component("my-com1", com1); App.component("my-com2", com2); App.component("my-com3", com3);
// 挂载应用 App.mount("#Application"); </script> </body>
|
- 我们可以定义一个混入对象(Mixin),混入对象中可以包含任意的组件定义选项,当此对象被混入组件时,组件会将混入对象中提供的选项引入当前组件内部。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| <body> <div id="Application"> <my-com1 title="组件1"></my-com1> <my-com2 title="组件2"></my-com2> <my-com3 title="组件3"></my-com3> </div>
<script> const App = Vue.createApp({});
const myMixin = { props: ['title'] }
const com1 = { mixins: [myMixin], template: ` <div style="border:red solid 2px;"> {{ title }} </div> ` };
const com2 = { mixins: [myMixin], template: ` <div style="border:blue solid 2px;"> {{ title }} </div> ` };
const com3 = { mixins: [myMixin], template: ` <div style="border:green solid 2px;"> {{ title }} </div> ` };
// 注册组件 App.component("my-com1", com1); App.component("my-com2", com2); App.component("my-com3", com3);
// 挂载应用 App.mount("#Application"); </script> </body>
|
Mixin选项的合并
当混入对象与组件中定义了相同的选项时,Vue可以非常智能地对这些选项进行合并。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| const myMixin = { data() { return { a: "a", b: "b", c: "c" } } }
const com = { mixins: [myMixin], data() { return { d: "d" } }, created() { console.log(this.$data) } }
|
- 如果属性的定义有冲突,则以组件内部定义的为准,例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| const myMixin = { props: ['title'], data() { return { a: 'a', b: 'b', c: 'c' } } }
const com = { mixins: [myMixin], data() { return { c: 'C' } }, created() { console.log(this.$data); } }
|
全局Mixin
1 2 3 4 5 6
| const App = Vue.createApp({}) App.mixin({ mounted(){ console.log("Mixin对象mounted") } })
|