如何在Vue 2中查看数据对象中的所有键

Ano*_*ous 14 watch vue.js vuejs2

我的数据对象:

data: {
    selected: {
        'type': null,
        'instrument': null
    },
Run Code Online (Sandbox Code Playgroud)

我的模板:

<select v-model="selected['instrument']" @change="switchFilter('instrument', $event)">
    <option v-for="instrument in instruments" :value="instrument.value">@{{ instrument.text }}</option> 
</select>

<select v-model="selected['type']" @change="switchFilter('type', $event)">
    <option v-for="type in types" :value="type.value">@{{ type.text }}</option> 
</select>
Run Code Online (Sandbox Code Playgroud)

如何同时查看两个选定的索引?每当任何索引更新时,我想做类似的事情:

watch: {
    selected: function(o, n) {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

Sau*_*abh 20

您可以使用来自vue deep观察者提供的选项.如文档中所述:

要检测对象内的嵌套值更改,还需要在options参数中传入deep:true.请注意,您不需要这样做来侦听Array突变.

您的代码如下所示:

watch: {
    'selected': {
        handler: function (val, oldVal) {
            console.log('watch 1', 'newval: ', val, '   oldVal:', oldVal)
        },
        deep: true
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 9

我认为您可以这样做:

watch: {
    $data: {
        handler: function(val, oldVal) {
            console.log(val)
        },
        deep: true
    }
},
Run Code Online (Sandbox Code Playgroud)

  • 我认为这个答案仍然增加了一个新角度。干燥而优雅。:) (4认同)
  • @Anonymous - 他的答案非常好,而且完全没有必要:它表明可以观看内置的“data”对象,而其他答案没有证明这一点。 (2认同)

Cod*_*Cat 7

watch: {
  'selected.type': function (newSelectedType) {
    console.log(newSelectedType)
  },

  'selected.instrument': function (newSelectedinstrument) {
    console.log(newSelectedinstrument)
  }
}
Run Code Online (Sandbox Code Playgroud)

如果您只是尝试计算新数据selected,则可以使用计算属性,因为Vue的数据是被动的,计算属性也可以检测数据的变化.


如果你想使用一个单一的功能观看整个对象,你可以用$watchdeep: true:

mounted () {
  this.$watch('$data.selected', this.onSelectedUpdate, { deep: true })
}
Run Code Online (Sandbox Code Playgroud)

请注意,这'$data.selected'是一个字符串,Vue将解析它.

在你的方法中:

onSelectedUpdate (newSelected) {
  console.log(newSelected)
}
Run Code Online (Sandbox Code Playgroud)