javascript - VueJS 使实例属性具有反应性

标签 javascript vue.js vuex vue-reactivity

我正在使用 instance properties 构建一个 VueJS 插件我需要将一些 react 值带回 VueJS。

我的搜索:

我不明白Object.defineProperty()背后的东西,我搜索了vuex getters initialisation因为我的逻辑类似,但我不明白如何正确操作。

简单示例:

在附加到其原型(prototype)的 VueJS 片段下面,main.js:

Vue.prototype.$ajax = {
  loading: false,
  isLoading () {
    return this.loading
  }
}

现在,从组件 component.vue 访问它:

export default {
    computed: {
      loading () {
        return this.$ajax.isLoading()
      }
    },
    created () {
      let self = this

      setInterval(() => {
        console.log(this.loading, this.$ajax.isLoading())
      }, 100)

      setTimeout(() => {
        this.$ajax.loading = true
      }, 1000)
    }
  }
}

结果示例:

setTimeout 之前,我们有 false false (这是预期的输出),但在 setTimeout 之后,我们有 false true code>(getter 不接收修改,但直接访问器有值)。

有什么想法可以将一些 react 性内容引入我的 $ajax.isLoading() 吗?

最佳答案

好的,通过挖掘 vuex 代码,我找到了一个解决方案:在插件内使用 Vue 实例,将数据放入其中,以便将 react 性引入外部。

来自问题:

Vue.prototype.$ajax = {
  _vm: new Vue({data: {
    loading: false
  }}),
  setLoading (loading) {
    this._vm.$data.loading = loading
  },
  isLoading () {
    return this._vm.$data.loading
  }
}

我刚刚通过我的组件上的此 setter 更改了直接访问器:

this.$ajax.setLoading(true)

关于javascript - VueJS 使实例属性具有反应性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48704234/

相关文章:

vue.js - 可以从 'outside' Vue 计算/观察属性吗?

javascript - 如何使用 vue.js 更改页面上的 html?

javascript - 如何在 Vuex 商店创建后手动添加 getters/mutations?

javascript - Vue 和 Vuex : computed property isn't called when changing state

javascript - 验证Token JWT是否有效

javascript - React.js 阻塞 header

javascript - Amazon S3 响应不返回日期 header

javascript - 一件一件改变元素的颜色

javascript - Vue 中的类绑定(bind)

javascript - vuex this.$store undefined in "mounted"生命周期钩子(Hook)