当前位置: 首页 > 面试题库 >

Vue.js-如何正确监视嵌套数据

宇文弘懿
2023-03-14
问题内容

我正在尝试了解如何正确观察道具的一些变化。我有一个父组件(.vue文件),它从ajax调用接收数据,将数据放入对象中,并通过v-
for指令使用它来呈现某些子组件,以下是我的实现的简化:

<template>
    <div>
        <player v-for="(item, key, index) in players"
            :item="item"
            :index="index"
            :key="key"">
        </player>
    </div>
</template>

…然后在<script>标签内:

 data(){
     return {
         players: {}
 },
 created(){
        let self = this;
        this.$http.get('../serv/config/player.php').then((response) => {
            let pls = response.body;
            for (let p in pls) {
                self.$set(self.players, p, pls[p]);
            }
    });
}

项目对象是这样的:

item:{
   prop: value,
   someOtherProp: {
       nestedProp: nestedValue,
       myArray: [{type: "a", num: 1},{type: "b" num: 6} ...]
    },
}

现在,在我的孩子“玩家”组件中,我试图观察任何Item的属性变化,并使用:

...
watch:{
    'item.someOtherProp'(newVal){
        //to work with changes in "myArray"
    },
    'item.prop'(newVal){
        //to work with changes in prop
    }
}

它有效,但是对我来说似乎有点棘手,我想知道这是否是正确的方法。我的目标是每次prop更改或myArray获取新元素或在现有元素内部进行某些更改时都执行一些操作。任何建议将不胜感激。


问题答案:

您可以为此使用深度监视程序:

watch: {
  item: {
     handler(val){
       // do stuff
     },
     deep: true
  }
}

现在,它将检测对item数组中对象的任何更改以及对数组本身的添加(与Vue.set一起使用时)。

编辑

如果您不想监视顶级对象的每项更改,而只想使用一种不太尴尬的语法直接监视嵌套对象,则只需观察一下computed

var vm = new Vue({
  el: '#app',
  computed: {
    foo() {
      return this.item.foo;
    }
  },
  watch: {
    foo() {
      console.log('Foo Changed!');
    }
  },
  data: {
    item: {
      foo: 'foo'
    }
  }
})


 类似资料:
  • 上下文:我正在使用java1.7.0_07和Jython构建一个JavaFX应用程序。我的应用程序有一个 ScrollPane,其中包含一个 GridPane,其中包含可变数量的 GridPanes。我的应用程序会在每次树视图选择发生更改时丢弃并重新生成最里面的 GridPanes。 问题:当我在树状视图中选择某个内容时,最里面的网格窗格非常大,除了第一个最里面的窗格外,其他所有的网格窗格都被推到

  • 关于vue-router的嵌套路由和编程式导航的问题 在向子路由的导航中,我发现router.push方法会将本级路由修改而不是导向子路由 router.push('mainPageView') 在当前路由为'/MainPage'的情况下,会将路由信息更改为'/mainPageView',而不是期望的'/MainPage/mianPageView',导致 我试着使用完全地址 发现能够正常使用。但在

  • 你好,堆栈溢出的好程序员!我已经花了一个星期的时间来解决这个问题,现在非常渴望一个解决方案。 我正在使用android。应用程序。不要将片段与支持片段混淆。 我有6个子片段名为: <代码>片段一 碎片二 碎片三 碎片a 碎片b 显示子片段<代码>片段A、<代码>片段B和<代码>片段C。 我正在尝试转换/设置父片段和子片段的动画。子片段平稳过渡,如预期。然而,当我转换到一个新的父片段时,它看起来很糟

  • elmentui table里的 scope.row如何取下面类型数据结构最内层的数据 1

  • 问题内容: 查看实时代码: 角JS 到底如何正确遍历嵌套键值对并正确输出,如下所示? 我要的是一棵像这样的树 当前视图是: JS: HTML: 问题答案: 您非常接近,我更新了小提琴。http://jsfiddle.net/y9wj6/9/

  • 如果我像这样设置嵌套的flexbox容器: ......然后设置生长2的宽度,使其比容器1宽,然后生长2溢出容器1。 我认为这不应该发生,因为当flex元素比flex容器大时,它们应该收缩。 如果我设置了生长2的灵活基础,那么这就像预期的那样工作。 有关演示,请参见以下示例: https://jsfiddle.net/chris00/ot1gjjtk/20/ 请使用Chrome或火狐 此外,我读到