在src下新建文件装载公用方法:mixin/baseMixin.js
const baseMixin = { data() { return { title: '这个是公用标题' } }, methods: { onClick() { console.log('我被点击了') } } } export default baseMixin;
然后可以在需要调用的组件中调用:src/view/App.vue
<template> <div class="baseMixin"> <h1> 这个是调用复用标题: {{title}} // 渲染:这个是公用标题 </h1> <h2> <button @click="onClick"> // 打印:我被点击了 这个是复用方法 </button> </h2> </div> </template>
<script> import baseMixin from '@/mixin/baseMixin' export default { mixins: [baseMixin], setup() { let text = '这个是vue3版本mixin的方法记录' return { text } } } </script>
如果需要全局直接使用mixin的封装的话,在main.js里面申明就可以
import { createApp } from 'vue' import App from './App.vue' import baseMixin from './mixin/baseMixin' createApp(App).mixin(baseMixin).mount('#app')
和定义局部组件类似,支持data,methods以及声明周期函数。
mixin.js
const myMixin = { data() { return { msg: 'hello vue3' } }, created() { console.log('mixin created'); }, methods: { handleClick() { console.log('mixin', this.msg); } } }
// 全局mixin 无需在组件中注册,自动注入。 app.mixin({ mounted() { console.log('这是一个全局的mixin'); } })
const myMixin = { msg: 'hello mixin ~' } // $options 组件注册的所有选项都会在 $options 中 const app = Vue.createApp({ mixins: [myMixin], msg: 'hello app ~', template: ` <div> {{ $options.msg }} </div>`, }) // ** 调整mixin中属性(如:msg)的优先级,使mixin的优先级高级组件的 app.config.optionMergeStrategies.msg = (mixinValue, appValue) => { return mixinValue || appValue; }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。