• Vue.mixin


    混入 (mixin) 提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能。

    数据对象在内部会进行递归合并,并在发生冲突时以组件数据优先。

    同名钩子函数将合并为一个数组,都将被调用。混入对象的钩子先调用,组件定义钩子后调用。

    值为对象的选项,例如 methodscomponents 和 directives,将被合并为同一个对象。两个对象键名冲突时,取组件对象的键值对

    混入发生在生命周期初始化等等之前,作为options合并,合并后才开始其它的初始化,所有混入不影响data等等监听和响应, 也不会出现因为引入同一mixin出现共享属性的情况。

    混入方式

    局部混入

    在组件中引入一个混入对象,通过组件的mixins绑定

    export const mixin={
        data(){
            return {
                number:1
            }
        }
    } 
    //组件
    import {mixin} from "xxx/mixin" export default {
    data(){
      return {
            }
    },
    mixins:[mixin],
    ...
    } </script>

    全局引入

    通过Vue.mixin(混入对象)

    Vue.mixin({
      created: function () {
        console.log('global mixin created')
      }
    })
    

     

    选项合并

    混入属性

    • 混入属性的定义方式跟Vue实例定义属性的方式一样data(){return{xxx}}
    • 当混入对象定义属性组件中未定义,混入后组件可使用此属性
    • 当组件和混入对象定义同名属性,混入后使用组件定义的属性,忽略混入
    export const mixin={
        data(){
            return {
                number:1
            }
        }
    }
    

     选择使用mixin的组件,如果没有number属性,混入后可以使用number属性;如果有number属性,混入后被过滤掉,以组件定义的number属性为主

    混入自定义方法

    • 混入方法的定义方式跟Vue实例定义方法的方式一样methods:{ func() {}}
    • 当混入对象定义方法组件中未定义,混入后组件可使用此方法
    • 当组件和混入对象定义同名方法,混入后使用组件定义的方法,忽略混入
    //mixin
    export const mixin={ methods:{ func(){ console.log("mixin func") } } }
    // 组件
    import {mixin} from "xxx/mixin"
    export default {
      mixins:[mixin],
      mounted(){
          this.func();
      },
      methods:{
          func(){
            console.log("component func");
          }   
      }
    }
    </script>
    

    当组件和混入对象定义同名方法:组件挂载后,执行this.func(), 控制台只会打印出 "component func",混入的func方法被忽略。

    混入生命周期钩子

    • 同名钩子函数将合并为一个数组,因此都【将被调用】。
    • 【混入对象的钩子】先执行,再到组件同名的钩子执行。
    export const mixin={
        created(){
                console.log("mixin created")
        }
    }
    // 组件
    <script>
    import {mixin} from "xxx/mixin"
    export default {
      mixins:[mixin],
      created(){
              console.log("component created");
      }
    }
    </script>
    

    当组件和混入对象定义同名生命周期钩子: 组件实例化后,同名钩子,混入对象定义执行后,组件定义的接着执行。以上代码控制台会先打印:

    mixin created
    component created
    

      

  • 相关阅读:
    java基础
    mysql入门
    基础整理
    遍历列表的两种方式
    oracle常用操作
    DIV+CSS网页布局技巧实例1:设置网页整体居中的代码
    html+css 淘宝首页静态页面案例
    WEB前端开发规范文档+CSS命名规范
    day05-苏宁易购导航html
    day04-html
  • 原文地址:https://www.cnblogs.com/baixinL/p/14337785.html
Copyright © 2020-2023  润新知