vuejs2 - 如何通过 vuejs 中的全局 mixins 在组件之间共享数据?为什么它没有反应?

标签 vuejs2 vue-component vue-mixin

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

代码如下:

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

base_url 是常量并且可以工作,但是 isLoading 必须是 react 性的并且不起作用,当我在一个组件中更改它并将其记录在另一个组件中时,它保持不变.

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

最佳答案

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

免责声明:我不认为这会被社区接受,只是将其作为学习练习。

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

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

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

这是一个 fiddle :https://jsfiddle.net/cuzox/ptsh283w/

再说一遍,我不赞同这种方法🙈

关于vuejs2 - 如何通过 vuejs 中的全局 mixins 在组件之间共享数据?为什么它没有反应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55633708/

相关文章:

javascript - 使用 vue.js 和 bootstrap 4 的弹出窗口

vue.js - vue2 : can not find a proper way to initialize component data by ajax

javascript - Vue 和 Rainyday.js

javascript - 如何将 Vue 属性设置为字符串化元素属性的值?

javascript - 如何在导入的 JS 库中访问 VueJS Mixin

javascript - vuejs 2组件base64图像未更新

vue.js - DisabledForUser 请确保运行 npm run dev 时应用程序 ID 设置正确?

css - 为什么在 Windows 和 Macbook Pro 上访问时卡的宽度不同?

Vue.js/Mixins - 有没有办法在 vue 组件之外获取全局 mixin 对象?

vue.js - mixin 函数中最好的命名约定是什么?