1. 程式人生 > 其它 >vue混入(mixin)的詳解

vue混入(mixin)的詳解

混入(mixin)提供了一種非常靈活的方式,來分發vue元件中的可複用功能。一個混入物件可以包含任意元件選項。當元件使用混入物件時,所有混入物件的選項將被“混合”進入該元件本身的選項。

1.鉤子函式

同名鉤子函式將會混合為一個數組,都將被呼叫到,但是混入物件的鉤子將在元件自身鉤子之前呼叫。

var mixin = {
  created: function () {
    console.log('混入物件的鉤子被呼叫')
  }
}

new Vue({
  mixins: [mixin],
  created: function () {
    console.log('元件鉤子被呼叫')
  }
})
// => "混入物件的鉤子被呼叫"
// => "元件鉤子被呼叫"
2.資料物件合併
<body>
    <div id="app"></div>
</body>
<script src="./vue.js"></script>
<script>
	var Mixins = {
        data: {
            msg: 'I am Mixins',
            msg1: 'I am Mixins msg1'
        },
        created() {
            console.log('我是元件中的變數:' + this.msg2)
        }
    }
    new Vue({
        mixins: [Mixins],
        el: '#app',
        data: {
            msg: 'I am #app',
            msg2: 'I am msg2'
        },
        created() {
            console.log(this.msg)
            console.log('我是混入物件中的變數:' + this.msg1)
        }
    })
    
	// 我是元件中的變數:I am msg2
	// I am #app
	// 我是混入物件中的變數:I am Mixins msg1
</script>

3.普通方法合併

當混合值為物件的選項時,例如 methods、components、directive,將被混合為同一個物件,兩個物件鍵名衝突時,取元件物件的鍵值對。

<body>
    <div id="app"></div>
</body>
<script src="./vue.js"></script>
<script>
    var Mixins = {
        methods: {
            mixin: function() {
                console.log('Mixin')
            },
            mixinTwo: function () {
                console.log('MixinTwo')
            }
        }
    }
    new Vue({
        el: '#app',
        mixins: [Mixins],
        methods: {
            mixin: function () {
                console.log('#app')
            }
        },
        mounted() {
            this.mixin()
            this.mixinTwo()
        }
    })
    
	// #app
	// MixinTwo
</script>

4.區域性混入

在componnets目錄下新建mixins資料夾,並在mixins目錄下建立一個mixin.js檔案,程式碼如下:

const mixin = {
  data() {
    return {
      msg: "hello"
    }
  },
  methods: {
    mixinMethod() {
      console.log(this.msg + ',這是mixin混入方法')
    }
  }
}
export default mixin;

在需要的頁面中引入:

<template>
	<div>{{msg}}</div>
</template>
<script>
import mixin from '../mixins/mixin'
export default {
	mixins: [mixin],
    data() {
	    return {
	    }
    }
	mounted() {
		this.mixinMethod()
	}
}

// hello,這是mixin混入的方法

5.全域性混入

在main.js加入以下程式碼

Vue.mixin({
  data() {
    return {
      msg: 'hello'
    }
  },
  methods: {
    mixinMethod() {
      console.log(this.msg+',這是mixin混入的方法')
    }
  }
})

在元件中直接引用:

<template>
	<div>{{msg}}</div>
</template>
<script>
export default {
    data() {
	    return {
	    }
    }
	mounted() {
		this.mixinMethod()
	}
}

// hello,這是mixin混入的方法
</script>