我有post.title
和post.body
的值,我需要在更改文本输入中的值后将其保存在数据中,以便以后可以使用这些新值供用户使用在API上写入(PUT
请求)。我该如何实现?
这是我的代码-
<template>
<div id="app">
<input type="text" v-model="createTitle" />
<input type="text" v-model="createBody" />
<button @click="addPost()">AddPost</button>
<ul>
<li v-for="(post, index) of posts">
<p>{{ post.title }}</p>
<p>{{ post.body }}</p>
<button @click="deleteData(index, post.id)">Delete</button>
<button @click="visiblePostID = post.id">
Изменить
</button>
<transition v-if="visiblePostID === post.id">
<p><input :value="post.title"><br><input :value="post.body">
<button type="button" @click="changePost(post.id, post.title, post.body)">Применить</button></p>
</transition>
</li>
</ul>
</div>
</template>
<script>
import axios from 'axios';
export default {
name: 'app',
data() {
return {
posts: [],
createTitle: '',
createBody: '',
visiblePostID: '',
}
},
changePost(id, title, body) {
axios.put('http://jsonplaceholder.typicode.com/posts/' + id, {
title: title,
body: body
})
}
}
</script>
答案 0 :(得分:1)
对于双向数据绑定,应使用v-model
。阅读here。
<transition v-if="visiblePostID === post.id">
<p>
<input v-model="post.title">
<br>
<input v-model="post.body">
<button type="button" @click="changePost(post.id, post.title, post.body)">Применить</button>
</p>
</transition>
答案 1 :(得分:1)
要添加到@Riddhi的答案中,您可以在带有临时变量的那些输入上使用v-model
,以便在确认PUT
请求成功之前不修改模型:
添加临时数据属性以保存模板中的<input>
值:
// template
<transition v-if="visiblePostID === post.id">
<input v-model="tmpTitle" />
<input v-model="tmpBody" />
</transition>
// script
data() {
return {
tmpTitle: '',
tmpBody: ''
}
}
用一个方法(名为editPost()
)替换编辑按钮的处理程序,并将当前帖子的ID,标题和正文传递给该方法,这些ID,标题和正文将存储在上面声明的临时数据属性中:
// template
<button @click="editPost(post.id, post.title, post.body)">
Изменить
</button>
// script
methods: {
editPost(id, title, body) {
this.tmpTitle = title;
this.tmpBody = body;
this.visiblePostID = id;
}
}
将changePost()
更新为还采用当前的post
,一旦PUT
请求成功,它将使用临时数据属性进行更新。
// template
<button type="button" @click="changePost(post, post.id, tmpTitle, tmpBody)">
Применить
</button>
// script
methods: {
async changePost(post, id, title, body) {
const { status } = await axios.put("https://jsonplaceholder.typicode.com/posts/" + id, { title: title, body: body });
if (status === 200 /* HTTP OK */) {
post.title = title;
post.body = body;
}
}
}