1.给每个Vue实例添加$store属性
主要是通过Vue.mixin()方法,vue的全局混入方法。改动的是beforeCreate()钩子,使得每个组件实例在创建前都添加了$store属性。
注:mixin普通用法是在对象中配置mixins: [mixin]属性,使得vue实例可以用mixin对象中的data和methods等。但Vue.mixin()是全局混入,一旦使用全局混入,它将影响每一个之后创建的 Vue 实例。
2.通过new一个新的vue实例的方式,实现数据响应式
class Store {
constructor (options) {
// this.vm = options.state 只是单纯获取state数据,但是数据修改不会更新界面
/** 借用Vue的双向绑定机制让Vuex中data变化实时更新界面 */
this.vm = new _Vue({
data: {
state: options.state
}
})
}
/* 类的属性访问器
访问state对象时候,就直接返回响应式的数据
Object.defineProperty get 同理
*/
get state () {
return this.vm.state
}
}
state里面的数据其实都是重新放在data属性中的,然后通过vue实例的data暴露出去,实现数据响应式的。