javascript - v-for 中的 VueJS 事件绑定(bind)

标签 javascript vue.js

我正在使用 VueJS 显示对象列表,如下所示:

<div v-for="register in registers">
    <input type="checkbox" v-model="register.isEnabled">
    <input type="text" v-model="register.name" :disabled="!register.isEnabled">

    <span v-if="register.saved">Saved</span>
    <span v-else><a @click="save(register)">Save now</a></span>
</div>

我想做的是观察该对象值的变化并将saved属性设置为false。这是我的 Vue 实例的示例版本:

new Vue({
    el: '#app',
    data: {
        registers: [
            { isEnabled: true, name: 'Register 1', saved: true },
            { isEnabled: false, name: '', saved: true },
        ]
    },
    methods: {
        save: function(event) {
            // Save object, set saved to true
        }
    }
});

我尝试使用 v-for 属性为 div 设置 onchange 监听器:

<div v-for="register in registers" @change="onChange(register)">

但是,只有当第一个输入元素发生更改(例如复选框)时才会触发。

我是否能够以某种方式监听对此寄存器对象所做的所有更改,而不必向每个输入添加 @change 事件?如果是这样,怎么办?

最佳答案

Am I able to somehow listen to all changes made to this register object, without having to add a @change event to every single input?

这实际上听起来是一个相当合理的解决方案,特别是因为 the change event doesn't bubble .

我尝试使用 watch 提出解决方案, but since deep watch is not an option for large arrays ,它会变得非常困惑。

new Vue({
    el: '#app',
    ready: function() {
        this.registers.forEach(function(register, index) {
            this.$watch('registers[' + index + ']', function(newRegister, oldRegister) {
              // Check that it wasn't the `saved` state that changed
              if (newRegister.saved === oldRegister.saved) {
                  newRegister.saved = false;
              }
            });
        });
    },
    data: {
        registers: [
            { isEnabled: true, name: 'Register 1', saved: true },
            { isEnabled: false, name: '', saved: true },
        ]
    },
    methods: {
        save: function(event) {
            // Save object, set saved to true
        }
    }
});

然后,如果寄存器属性发生变化,您将必须重新绑定(bind)所有观察者。

因此,仅使用 @change 监听器可能会更轻松。

关于javascript - v-for 中的 VueJS 事件绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36978333/

相关文章:

javascript - 如何在 ag-grid 行上创建工具提示?

javascript - js 使颜色变亮/变暗

javascript - 我无法修复错误 "Property or method is not defined on the instance but referenced during render."

javascript - Vue.js 在 v-for 中使用方法

javascript - 根据特定类名对元素进行排序

javascript - 我能用种子做什么?

vue.js - 无法将选中的值从自定义复选框组件传递给父组件

vue.js - 从源代码构建的 CK Editor 5 + Vue JS + 在本地使用组件 = 重复

javascript - 找不到模块 'babel-core' 但已安装 @babel/core

javascript - 在 v -for 循环中分别对每个元素进行动画处理 (Vue.JS)