向对象添加新密钥然后动态修改相关字段时出现问题。
例如,添加一个新列,将列名设置为" url",然后尝试更新第1行的url值。在我的示例中,即使该字段具有v,该值也不会实际更新-model ="行[field.name]。当field.name更改
时,我应该做些什么来确保更改row [field.name]代码: https://codepen.io/RuttyJ/pen/zdgbPB
<table>
<thead>
<tr>
<template v-for="(field, f) in fields">
<th>
<flex-row>
<flex-column style="width: 100%;">
<flex>
<input type="text" :value="field.name" @input="updateField(f, 'name', $event.target.value)" style="width:100%">
</flex>
<flex style="width: 100%;">
<select :value="field.type" @change="updateField(f, 'type', $event.target.value)"
style="width:100%">
<option v-for="fieldType in fieldTypeOpts"
:value="fieldType.value"
:selected="fieldType.value == field.type">{{fieldType.label}}</option>
</select>
</flex>
</flex-column>
<flex>
<button @click="removeField(f)"
style="height:100%;">X</button>
</flex>
</flex-row>
</th>
</template>
<td>
<button @click="newField()">+</button>
</td>
</tr>
</thead>
<tbody>
<tr v-for="(row, r) in rows">
<td v-for="field in fields">
<template>
<template v-if="'checkbox' == field.type">
<input type="checkbox"
style="float:right;"
v-model="row[field.name]"
>
</template>
<input type="number"
v-else-if="'number' == field.type"
style="width:100%"
:value="row[field.name]"
@input="updateRow(r, field.name, $event.target.value)">
<input type="text" style="width:100%"
v-else
v-model="row[field.name]">
{{field.name}}
<pre>{{field}}</pre>
<pre>{{row}}</pre>
</template>
</td>
<td><button @click="removeRow(r)">X</button></td>
</tr>
</tbody>
<tfoot>
<tr>
<td v-for="(field, i) in fields">
</td>
<td>
<button @click="newRow()">+</button>
</td>
</tr>
</tfoot>
</table>
仅供参考我使用v-model和:value / @ input
进行了尝试答案 0 :(得分:2)
你正在打破reactivity。如果修改安装组件时未声明的属性,则会破坏反应性。您正在尝试直接修改稍后添加的数组中的对象,而Vue无法跟踪该对象。因此,我要求团队中的所有程序员在修改对象的属性时使用它。$ set。
您可以替换:
this.rows[rowid][fieldName] = value;
与
this.$set(this.rows[rowid], fieldName, value)