Vue имеет некоторые функции многократного использования кода для компонентов. Mixins
является одним из них. Mixins
не что иное, как объект javaScript, который содержит все крючки, методы и свойства жизненного цикла vuejs. Он очень прост в использовании и полезен для повторного использования и чистого кода. Почти каждая передняя или задняя часть фреймворка имеет такие функции или средства.
Зарегистрировать миксины
mixins
можно зарегистрировать глобально и локально
01. Глобальная регистрация
Vue.mixin({ created:function (){ console.log('Global mixin created hook') }, methods:{ foo: function () {console.log('foo') }, .... })
Глобальные mixins
применяются буквально к каждому отдельному компоненту,даже к стороннему плагину.
02. Местная регистрация
// mixins/postMixin.js export default postMixin = { created: function () { console.log('created from mixin') } } // components/post.vue import postMixin from './mixins/postMixin' export default { name: 'post', mixins: [postMixin], created: function (){ console.log('created from component') } })
Локальная регистрация эффективна только для тех компонентов, которые принимаются mixins
объектом. примеси компонентов — это массив, который может принимать несколько аргументов в качестве примесей.
Что произойдет, если миксины и параметры компонентов будут одинаковыми?
Когда компонент использует миксин, все параметры в миксине будут «смешаны» с собственными параметрами компонента. Опции миксина будут вызываться перед собственной опцией компонента. поэтому параметры компонента будут иметь приоритет.
01. Свойство метода data()
будет полем с данными компонента. если свойство конфликтует, то свойство компонента имеет приоритет.
// mixins/postMixin.js export default postMixin = { data: function () { return { title: 'This is post title from mixin', body: 'This is post body from mixin' } } } new Vue({ mixins: [mixin], data: function () { return { title: 'This is post title from component', } }, created: function () { console.log(this.$data) // { // title: "This is post title from component", // conflicts // body: "This is post body from mixin" // marge // } } })
02. created()
вариант будет margeвместе.
// mixins/postMixin.js export default postMixin = { created: function () { console.log('created from mixin') } } // components/post.vue import postMixin from './mixins/postMixin' export default { name: 'post', mixins: [postMixin], created: function (){ console.log('created from component') } }) // -> "created from mixin" // -> "created from component"
03. methods
, components
и directives
будут объединены в один объект. Параметры компонента будут иметь приоритет, если в этих объектах есть конфликтующие ключи.