2

我想在所有组件之间共享简单数据,我知道它可以使用Vuex或全局变量作为状态来完成,但这对我的项目来说太过分了!

这是代码:

Vue.mixin({
    data: function () {
        return {
            base_url: 'http://test.develop/api/v1/',
            isLoading : false
        }
    }
})

base_url是恒定的并且它的工作但isLoading必须是反应性的并且它不工作,当我在一个组件中更改它并将它记录到另一个组件中时,它保持不变。

现在我的问题是在 vue mixins 中应该使用什么样的数据?mixins 是否仅用于共享代码或数据也可以由 mixins 共享?

4

1 回答 1

5

Vuex 可能不会矫枉过正。Vuex 非常适合小型和大型项目。Vue mixin 并不是为了保持全局状态。Mixin 是扩展的 OOP 等价物。您基本上可以通过合并继承其上的所有内容,并且组件具有优先权。它仅用于共享行为(方法、数据、生命周期)。

免责声明:我不能认为这在社区中被接受,只是把它当作一个学习练习。

但是,在 mixin 中保存某种“全局状态”的唯一方法是将其初始化对象包装在一个闭包中,并跟踪反应对象中的信息,如下所示:

Vue.mixin((()=>{
  let store = Vue.observable({
    isLoading: true
  })

  return {
    computed: {
      isLoading: {
        get(){
          return store.isLoading
        },
        set(val){
          store.isLoading = val
        }
      }
    },
  }
})())

这是一个小提琴:https ://jsfiddle.net/cuzox/ptsh283w/

同样,我不认可这种方法

于 2019-04-11T23:23:53.033 回答