当前位置: 首页 > 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 里的同名方法。

http://www.dtcms.com/a/102894.html

相关文章:

  • 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]”
  • 优秀的 React 入门开源项目推荐
  • Redis 源码硬核解析系列专题 - 结语:从源码看Redis的设计哲学
  • Meta Llama 3:开启大语言模型新纪元
  • 美股恐惧贪婪指数监控
  • Kafka 实战指南:原理剖析与高并发场景设计模式
  • Python Cookbook-4.17 字典的并集与交集
  • 翻译: 人工智能如何让世界变得更美好一
  • 【Easylive】项目常见问题解答(自用持续更新中......)
  • 量子退火实用案例(1):量子退火求解化学中的分子吸附问题,10小时缩短为15分
  • 周总结aa