1. 程式人生 > 實用技巧 >vue中相同邏輯如何抽離

vue中相同邏輯如何抽離

就是使用Vue.mixin方法(混入),其提供了一種非常靈活的方式,來分發 Vue 元件中的可複用功能。一個混入物件可以包含任意元件選項。當元件使用混入物件時,所有混入物件的選項將被“混合”進入該元件本身的選項。說白了就是給每個生命週期,函式等等中間加入一些公共邏輯。

//vue/src/core/global-api/mixin.js 

import { mergeOptions } from '../util/index'

export function initMixin (Vue: GlobalAPI) {
  Vue.mixin = function (mixin: Object) {
    
this.options = mergeOptions(this.options, mixin) return this } } -------------------------------------------------------------------- //vue/src/core/util/options.js / /** * Merge two option objects into a new one. * Core utility used in both instantiation and inheritance. */ export function mergeOptions ( parent: Object, child: Object, vm
?: Component ): Object { if (process.env.NODE_ENV !== 'production') { checkComponents(child) } if (typeof child === 'function') { child = child.options } normalizeProps(child, vm) normalizeInject(child, vm) normalizeDirectives(child) // Apply extends and mixins on the child options,
// but only if it is a raw options object that isn't // the result of another mergeOptions call. // Only merged options has the _base property. if (!child._base) { if (child.extends) { //遞迴合併extends parent = mergeOptions(parent, child.extends, vm) } if (child.mixins) { //遞迴合併mixin for (let i = 0, l = child.mixins.length; i < l; i++) { parent = mergeOptions(parent, child.mixins[i], vm) } } } const options = {} //屬性和生命週期的合併 let key for (key in parent) { mergeField(key) } for (key in child) { if (!hasOwn(parent, key)) { mergeField(key) } } function mergeField (key) { const strat = strats[key] || defaultStrat options[key] = strat(parent[key], child[key], vm, key) } return options }