Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从监视的数组中获取索引_Javascript_Vue.js_Vuejs2 - Fatal编程技术网

Javascript 从监视的数组中获取索引

Javascript 从监视的数组中获取索引,javascript,vue.js,vuejs2,Javascript,Vue.js,Vuejs2,我有一个vue应用程序,可以在其中监视阵列的更改。这很好用。但我不确定如何获取已更改的数组项的索引,因为watch回调只传入旧/新值 演示: 简化示例: new Vue({ el: '#demo', data: { things: [{foo:1}, {foo:2}] }, watch: { things: { handler: function (val, oldVal) { alert('a thing changed')

我有一个vue应用程序,可以在其中监视阵列的更改。这很好用。但我不确定如何获取已更改的数组项的索引,因为watch回调只传入旧/新值

演示:

简化示例:

new Vue({
    el: '#demo',
  data: {
    things: [{foo:1}, {foo:2}]
  },
  watch: {
    things: {
      handler: function (val, oldVal) {
        alert('a thing changed')
      },
      deep: true
    }
  },
  methods: {
    change: function () {
        this.things[0].foo = 5
    }
  }
})

不幸的是,这不是现成的。结合使用参数分解和,您可以实现一些应该做到的事情。比如,

newvue({
el:'演示',
数据:{
事物:[{foo:1},{foo:2}]
},
方法:{
更改:函数(…参数){
让[thing,after,before]=args;
console.log(东西);
}
},
挂载:函数(){
this.things.forEach(thing=>{
this.watch(()=>this.change.bind(null,thing))
});
}

})
vue不监视数组中索引的更改,因为它是一个引用。如果您需要获取索引,请将数组包装在代理中并调用函数。我很确定没有用于此的内置功能,因为用例似乎有点奇怪。请你详细解释一下你的意图好吗?据我所知,你已经得到了你对
change
方法感兴趣的索引,为什么不存储/使用它呢?hi@GMaiolo,change方法是一个用于演示目的的硬编码索引键。我有一个有很多列和很多行的表。此表是通过数组循环生成的。如果我将更改绑定到每行中的每个单元格,则页面加载速度非常慢。然而,如果我观察更改,绑定更改事件,页面加载速度会非常快。我的手表演示效果很好,只是无法获取索引:(嗨@zfrisch,我不完全明白你的意思。我对Vueco还不太熟悉。你能告诉我数组是如何以及何时更改的吗?如果我们从
东西
数组中推/弹出,这将无法正常工作,与此不完全一样。但谢天谢地,你可以动态地将这些观察者添加到新的数组元素中。我将其用于动态产品l。)ist-当一个新产品被添加到列表中时,我申请了观察者。谢谢你的建议。我希望有一些维护更少的东西。真遗憾,关于更改项目的更多数据没有传递给观察者。