zoukankan      html  css  js  c++  java
  • 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
    

      

  • 相关阅读:
    Python简介
    开博啦
    关于ajax访问跨域问题
    关于PHP empty()函数的错误理解
    if判断 和&&
    元素和节点
    详解js和jquery里的this关键字
    document.body的一些用法以及js中的常见问题
    浏览器报错显示
    getAttribute()获取属性
  • 原文地址:https://www.cnblogs.com/baixinL/p/14337785.html
Copyright © 2011-2022 走看看