javascript - Vue 组件不对插件数据更改使用react

标签 javascript vue.js vuejs2 watch

我正在尝试让组件对 Vue 插件中的数据更改使用react。为此,当插件实例化时,它会在其构造函数中实例化一个 Vue 对象,如下所示:

this._vm = new Vue({
  data: {
    obj: null,
    status: false,
  },
  watch: {
    obj(val) {
      console.log('From inside the plugin, "obj" changed:', val);
    }
  }
})

页面加载时,应用程序会检查 localStorage 是否包含 obj 属性的数据。如果是这种情况,在如上所示创建 Vue 实例后,会为该属性分配一个对象,如下所示: this._vm.obj = {x: 1, y:2, z:3}.这效果很好,我在控制台中看到以下内容:

15:55:37.346 Component mounted, "obj": Object { … }
15:55:37.350 From inside the plugin, "obj" changed: Object { … }

我什至可以以编程方式将 this._vm.obj 重置为 null,此时控制台会按预期显示 react 性:

16:11:48.722 From inside the plugin, "obj" changed: null
16:11:48.726 Component watch "status": false
16:11:48.727 Component watch "obj": null

但是,如果 localStorage 中没有找到数据,则会向服务器发出请求,并使用响应数据更新 this._vm.obj。用于执行此操作的方法与上面相同(即 this._vm.obj = {x: 1, y:2, z:3})。插件中的观察者使用react(从插件内部,“obj”发生了变化),但组件没有反应...

如果有人有指针,那就太好了!

一些片段:
组件中的观察者:

watch: {
  '$MyPlugin.status'(val) {
    console.log('Component watch "status":', val)
  },
  '$MyPlugin.obj'(val) {
    console.log('Component watch "obj":', val)
  }
},

插件类有 getter 来访问数据:

get status() {
  return this._vm.status || false
}

get obj() {
  return this._vm.obj
}

最佳答案

回答我自己的问题。问题很简单,在某些情况下,我的插件类从其构造函数返回了一个 void promise - 我没想到会产生任何效果。 (结果是constructors can return something。)

下面是我的插件的install函数。当 instance 是一个 void Promise,而不是 MyPlugin 对象时,我尝试从其他组件观察的属性最初是 未定义,因此不是 react 性的。

export default (() => {

    return function install(Vue, options) {

        let instance = new MyPlugin(Vue, options);

        Object.defineProperties(Vue.prototype, {
            $MyPlugin: {
                get: function () {
                    return instance;
                }
            }
        });
    }
})();

关于javascript - Vue 组件不对插件数据更改使用react,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60760332/

相关文章:

javascript - 在父组件中增加子组件时如何更新子组件?

javascript - 使用 JavaScript 访问 Google Maps API

javascript - Vue Js v 绑定(bind) :class syntax not working ?

javascript - 无法在 Ionic 服务中运行 angular-spotify 方法

vue.js - 为什么我在 Vue.js 3 中使用 async setup() 时得到空白(空)内容?

javascript - 如何在 Vuex 中存储非 react 性数据?

javascript - VueJs中如何通过路由名称获取特定路由数据?

javascript - VueJS 中的秒到分钟

javascript - js中如何将对象放入HashMap中?

javascript - 将div分成方 block