vue2中watch能不能观察外部属性?

发布于 2022-09-06 15:17:27 字数 891 浏览 15 评论 0

我用的vue2.0,写的一个组件watch有点疑问请教一下各位大神。

我在data里面声明了一个变量isVRMode:

然后我页面上引入了一个库(Cesium)的三维场景,上面自带了一个按钮vrButton,它有一个属性vrBotton.viewModel.isVRMode。

问题来了,我有没有办法观察vrBotton.viewModel.isVRMode这个属性的变化呢?或者是和我的data中的isVRMode关联起来,然后观察呢?

由于vrBotton.viewModel.isVRMode的值改变是点那个按钮自动触发的,不是我控制的,我搞了好久了,没找到解决办法,望处理过类似的大拿指点一下。

var myObject = {}
Object.defineProperty(myObject, 'isVRMode', {
value: viewer._vrButton.viewModel.isVRMode
         })

this.$watch('myObject.isVRMode', function (val) {
console.log('myObject.isVRMode')
         }, {
deep: true
         })

window.myObject = myObject
我试图这样把属性关联起来,但实际上并没什么用,如下图,我点按钮后viewer._vrButton.viewModel.isVRMode已经是true了,但是myObject.isVRMode仍然是false。

图片描述

不知这种情况是不支持,还是我思路弄错了呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

戒ㄋ 2022-09-13 15:17:27

watch:{

isVRMode: function(new,old){
    //变化时你要做的操作
}

}

如果没有 2022-09-13 15:17:27
// 模拟你的对象
let vrBotton = {
  viewModel: {
    isVRMode: 'hello'
  }
}

// 处理逻辑
function change (val, oldVal) {
  console.log(`new value: ${val}, old value: ${oldVal}`)
}

(function () {
  let val = vrBotton.viewModel.isVRMode
  Object.defineProperty(vrBotton.viewModel, 'isVRMode', {
    get () {
      return val
    },
    set (cur) {
      if (val !== cur) {
        change(cur, val) // 数据改变的时候调用change方法
        val = cur
      }
    }
  })
})()

效果截图如下:

clipboard.png

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文