本文首發 https://shudong.wang/10382.html打算實現一個vuex先從第一步開始,實現一個相似$store 的惟一全局變量,父組件和子組件均可以隨時調用。
下面咱們來實現html
$options.parent
當咱們在子組件調用的時候,能夠把咱們設置的變量,掛在到this上面
下面實現一個 $stark 掛在到全局變量
if (this.$options.stark) { this.$stark = this.$options.stark } else if (this.$options.parent && this.$options.parent.$stark) { this.$stark = this.$options.parent.$stark }
mixin.js
Vue.mixin({ beforeCreate: starkInit }) // shudong.wang function starkInit() { const options = this.$options if (options.stark) { this.$stark = typeof options.stark === 'function' ? options.stark() : options.stark } else if (options.parent && options.parent.$stark) { this.$stark = options.parent.$stark } }
stark.js
import applyMixin from './mixin' export class Stark { constructor(options = {}) { this.options = options } get state() { return this.options.state } } export function install(_Vue) { applyMixin(Vue) }
index.js
import { Stark, install } from './stark' export default { Stark, install, }
state.js
export const state = { count: 10 }
import Vue from 'vue' import App from './App.vue' import stark from './stark' Vue.config.productionTip = false new Vue({ render: h => h(App), stark, }).$mount('#app')
created() { console.log('App',this.$stark); },