• Vue中的Mixin


    Vue中的Mixin

    一、总结

    一句话总结:

    VUE中的【混入 (mixin) 】提供了一种非常灵活的方式,来分发 Vue 组件中的【可复用功能】。一个混入对象可以包含任意组件选项。当组件使用混入对象时,所有混入对象的选项将【被“混合”进入】该【组件】本身的选项。

    1、VUE中的【混入 (mixin) 】的【冲突解决】?

    【组件优先,而不是mixin】:值为对象的选项,例如 methods、components 和 directives,将被合并为同一个对象。两个对象键名冲突时,取组件对象的键值对。
    【vue的mixin冲突解决实例】:可以看到下面实例中,冲突项的取值就是取的组件中的,【vm.conflicting() // => "from self"】
    var mixin = {
      methods: {
        foo: function () {
          console.log('foo')
        },
        conflicting: function () {
          console.log('from mixin')
        }
      }
    }
    
    var vm = new Vue({
      mixins: [mixin],
      methods: {
        bar: function () {
          console.log('bar')
        },
        conflicting: function () {
          console.log('from self')
        }
      }
    })
    
    vm.foo() // => "foo"
    vm.bar() // => "bar"
    vm.conflicting() // => "from self"

    2、VUE中的【混入 (mixin) 】的钩子调用情况?

    【都调用,混入对象的钩子先】:VUE中的混入 (mixin) 的【同名钩子函数】将合并为一个【数组】,因此【都将被调用】。另外,混入对象的钩子将在组件自身钩子之前调用。
    var mixin = {
      created: function () {
        console.log('混入对象的钩子被调用')
      }
    }
    
    new Vue({
      mixins: [mixin],
      created: function () {
        console.log('组件钩子被调用')
      }
    })
    
    // => "混入对象的钩子被调用"
    // => "组件钩子被调用"

    二、Vue中的Mixin

    1、官网中的解释

    混入 — Vue.js
    https://cn.vuejs.org/v2/guide/mixins.html

    混入 (mixin) 提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能。一个混入对象可以包含任意组件选项。当组件使用混入对象时,所有混入对象的选项将被“混合”进入该组件本身的选项。

    // 定义一个混入对象
    var myMixin = {
      created: function () {
        this.hello()
      },
      methods: {
        hello: function () {
          console.log('hello from mixin!')
        }
      }
    }
    
    // 定义一个使用混入对象的组件
    var Component = Vue.extend({
      mixins: [myMixin]
    })
    
    var component = new Component() // => "hello from mixin!"

    2、其它博客中的说法

    Vue 中mixin 的用法详解

    https://www.cnblogs.com/zjy850984598/p/11355668.html
     
     

      vue中提供了一种混合机制--mixins,用来更高效的实现组件内容的复用。最开始我一度认为这个和组件好像没啥区别。。后来发现错了。下面我们来看看mixins和普通情况下引入组件有什么区别?

         组件在引用之后相当于在父组件内开辟了一块单独的空间,来根据父组件props过来的值进行相应的操作,单本质上两者还是泾渭分明,相对独立。

         而mixins则是在引入组件之后,则是将组件内部的内容如data等方法、method等属性与父组件相应内容进行合并。相当于在引入后,父组件的各种属性方法都被扩充了。

         单纯组件引用:

              父组件 + 子组件 >>> 父组件 + 子组件

         mixins:

              父组件 + 子组件 >>> new父组件

    作用:多个组件可以共享数据和方法,在使用mixin的组件中引入后,mixin中的方法和属性也就并入到该组件中,可以直接使用。钩子函数会两个都被调用,mixin中的钩子首先执行。

    下面给大家介绍vue mixin的用法,具体介绍如下所示:

    1.定义一个 js 文件(mixin.js)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    export default {
     data() {
      return {
       name: 'mixin'
      }
     },
     created() {
      console.log('mixin...'this.name);
     },
     mounted() {},
     methods: {}
    }

    关于用法,vue文档中有详细的介绍,这里只介绍怎么在一个vue文件中使用mixin。

    2.在vue文件中使用mixin

    1
    2
    3
    4
    import '@/mixin'// 引入mixin文件
    export default {
     mixins: [mixin]
    }

    接下来记录一下我在项目中使用mixin的具体例子:

    首先我们来看一下项目中的需求:

    大家从图可以看出来,有两个模块的内容差不多一样,但又有区别。有些人会说既然都差不多为什么不抽出来直接整成一个公共组件呢?不是不可以,但为了以后的维护,万一产品整了个一个模块单独有的呢?这样不方便以后的代码维护。所以我使用了mixin。还有一点,后台提供的接口最好是同一个根据不同的类型去拿不同模块的数据,这样方便简单,下面贴代码:

    1.mixin文件中:

    2.组件中:

     
     
     
     
     
    我的旨在学过的东西不再忘记(主要使用艾宾浩斯遗忘曲线算法及其它智能学习复习算法)的偏公益性质的完全免费的编程视频学习网站: fanrenyi.com;有各种前端、后端、算法、大数据、人工智能等课程。
    博主25岁,前端后端算法大数据人工智能都有兴趣。
    大家有啥都可以加博主联系方式(qq404006308,微信fan404006308)互相交流。工作、生活、心境,可以互相启迪。
    聊技术,交朋友,修心境,qq404006308,微信fan404006308
    26岁,真心找女朋友,非诚勿扰,微信fan404006308,qq404006308
    人工智能群:939687837

    作者相关推荐

  • 相关阅读:
    centos7 设置mongodb远程连接
    计算两个坐标点之间的点的坐标
    vim 设置字体和解决乱码
    webpack无法通过 IP 地址访问 localhost 解决方案
    使用GitHub作为Maven仓库并引用
    ajax 文件下载
    展开被 SpringBoot 玩的日子 《 六 》 整合 Mybatis
    展开被 SpringBoot 玩的日子 《 五 》 spring data jpa 的使用
    展开被 SpringBoot 玩的日子 《 四 》 Session 会话共享
    展开被 SpringBoot 玩的日子 《 三 》 整合Redis
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/14342803.html
Copyright © 2020-2023  润新知