我正在检索一个对象的对象,对于每个对象,我都会制作一个文本输入列表以编辑其值。我的问题是输入的值没有改变,因此仅以起始值提交,如何使输入值动态?
<ul>
<li v-for="variable in variables">
<input type="text" :value="variable.value" />
<button @click="updateVariable(variable.id, variable.value)">Update</button>
</li>
</ul>
...
methods: {
updateVariable(id, value) {
axios.post('/destination', {
params: {
id: id,
value: value
}
})
.then((response) => {
console.log(response);
})
.catch((error) => {
console.log(error);
})
}
}
答案 0 :(得分:1)
您只是给每个输入一个初始值,但没有将其绑定到任何反应性数据属性。
使用v-model指令来使用输入绑定并将Vue的反应性应用于输入:
<ul>
<li v-for="variable in variables">
<input type="text" v-model="variable.value" />
<button @click="updateVariable(variable.id, variable.value)">Update</button>
</li>
</ul>
请注意,必须在组件的data object中声明variables
数组,才能正常工作。
答案 1 :(得分:0)
使用v-model
,:value
将不会跟踪更改
// Fake axios to debug with
const axios = {
post(ep = "", data) {
console.log(`would send \n${JSON.stringify(data)}\nto ${ep}`);
return Promise.resolve("OK");
}
};
const app = new Vue({
el: "#app",
data() {
return {
variables: {
foo: {
id: "foo",
value: "bar"
},
fizz: {
id: "fizz",
value: "buzz"
}
}
};
},
methods: {
updateVariable(id, value) {
axios.post('/destination', {
params: {
id: id,
value: value
}
})
.then((response) => {
console.log(response);
})
.catch((error) => {
console.log(error);
})
}
}
});
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.min.js"></script>
<div id="app">
<ul>
<li v-for="variable in variables">
<input type="text" v-model="variable.value" />
<button @click="updateVariable(variable.id, variable.value)">Update</button>
</li>
</ul>
</div>