当前位置: 首页 > news >正文

【 Vue 2 中的 Mixins 模式】

Vue 2 中的 Mixins 模式

在 Vue 2 里,mixins 是一种灵活的复用代码的方式,它能让你在多个组件间共享代码。借助 mixins,你可以把一些通用的选项(像 datamethodscomputed 等)封装到一个对象里,然后在多个组件中使用。

下面是 mixins 的基本使用示例:

// 定义一个 mixin
const myMixin = {
    data() {
        return {
            mixinData: '这是 mixin 中的数据'
        }
    },
    methods: {
        mixinMethod() {
            console.log('这是 mixin 中的方法');
        }
    }
};

// 定义一个组件并使用 mixin
const MyComponent = {
    mixins: [myMixin],
    data() {
        return {
            componentData: '这是组件中的数据'
        }
    },
    methods: {
        componentMethod() {
            console.log('这是组件中的方法');
        }
    }
};

在这个例子中,MyComponent 组件使用了 myMixin,这意味着 MyComponent 能够访问 myMixin 里定义的 datamethods

选项合并规则

当组件使用 mixins 时,若组件和 mixin 存在同名选项,就需要依据一定规则进行合并:

数据对象(data

如果组件和 mixin 都定义了 data 选项,它们会递归合并。当出现键名冲突时,组件的数据会覆盖 mixin 的数据。

const myMixin = {
    data() {
        return {
            message: 'mixin 消息'
        }
    }
};

const MyComponent = {
    mixins: [myMixin],
    data() {
        return {
            message: '组件消息'
        }
    }
};

// 创建组件实例
const vm = new Vue(MyComponent);
console.log(vm.message); // 输出: 组件消息

钩子函数

如果组件和 mixin 都定义了相同的钩子函数(如 createdmounted 等),这些钩子函数会被合并成一个数组,并且都会被调用。mixin 的钩子函数会先于组件的钩子函数执行。

const myMixin = {
    created() {
        console.log('mixin 的 created 钩子');
    }
};

const MyComponent = {
    mixins: [myMixin],
    created() {
        console.log('组件的 created 钩子');
    }
};

// 创建组件实例
const vm = new Vue(MyComponent);
// 输出:
// mixin 的 created 钩子
// 组件的 created 钩子

方法、计算属性和 watch

如果组件和 mixin 存在同名的方法、计算属性或 watch,组件的定义会覆盖 mixin 的定义。

结合你提供的代码,MapBaseMarker.js 组件混入了 MapBaseMixin.js,两个文件里都有 init 方法。当 MapBaseMarker 组件实例化时,调用的 init 方法是 MapBaseMarker.js 文件里定义的 init 方法,而非 MapBaseMixin.js 里的 init 方法。

// MapBaseMixin.js
const MapBaseMixin = {
    methods: {
        init() {
            console.log('MapBaseMixin 中的 init 方法');
        }
    }
};

// MapBaseMarker.js
export default {
    mixins: [MapBaseMixin],
    methods: {
        init() {
            console.log('MapBaseMarker 中的 init 方法');
        }
    }
};

// 当创建 MapBaseMarker 组件实例时,调用的 init 方法是 MapBaseMarker 中的 init 方法

综上所述,当组件和 mixin 存在同名方法时,组件自身的方法会覆盖 mixin 里的同名方法。

相关文章:

  • AI换脸工具--FaceFusion 整合包
  • 13 配置Hadoop集群-测试使用
  • harmony OS NEXT-沉浸式布局实现笔记
  • CSS层叠顺序
  • 算法竞赛备赛——【数据结构】并查集
  • Hexo + Fluid博客实现自定义图标
  • Verilog HDL 100道面试题及参考答案
  • 目前市场上,好用的校招系统是哪个?
  • 我与数学建模之启程
  • C/C++网络编程【1】----- 大纲
  • 【深度视觉】第十八章:YOLO系列1
  • Jetpack Room 使用与原理解析
  • Vue2 vs Vue3 生命周期全面对比:created 的进化与革新!!!
  • String数据结构之验证码实战
  • Unity3D仿星露谷物语开发32之地面属性决定角色动作
  • 【Django】教程-5-ModelForm增删改查+规则校验【正则+钩子函数】
  • 数据库表省市区分析
  • Kubernetes可视化面板——KubePi(Kubernetes Visualization Panel - kubepi)
  • Android BottomNavigationView 完全自定义指南:图标、文字颜色与选中状态
  • Outlook客户端无法连接到服务器,添加账户显示“无网络连接,请检查你的网络设置,然后重试。[2603]”
  • 做网站多少钱一个/网站搜索优化价格
  • 设计公司网站首页显示/石家庄自动seo
  • 网站分析百度 代码/seo网站推广如何做
  • 怎么看网站关键词密度/指数基金什么意思
  • 德清县城乡建设局网站/百度财报q3
  • 网站关键词在哪里修改/优书网首页