在 v-for 的所有输入中动态显示文本输入
Text input displayed dynamically in all the inputs in v-for
我有这段代码:
<post v-for="post in posts" :post="post" :key="post.id">
<template v-slot:publishComment>
<v-text-field v-model="message"></v-text-field>
<v-btn color="green" type="submit" v-on:click.prevent="publishComment(post.id, message)">Go!</v-btn>
</template>
</post>
使用此代码,当我在输入中写入文本时,我看到相同的文本动态显示在所有输入中(由 v-for 创建),尽管当我单击 Go! 时,只发送了正确的文本。
所以问题是如何让输入的文本只出现在正确的输入中。
我想过使用条件 v-if 和焦点输入,但我没有设法实现它。
这是因为所有输入都具有与 v-model
相同的变量 (message
)。创建消息数组或将其添加到 post,如 post. message
.
一个观察: 当您动态创建输入时,每个输入的 v-model
应该不同。在您的示例代码中,您将相同的 message
绑定到每个输入 v-model
,每个输入应该不同。
工作演示:
const app = new Vue({
el: '#app',
data() {
return {
posts: [{
id: 1,
message: ''
}, {
id: 2,
message: ''
}, {
id: 3,
message: ''
}]
}
},
methods: {
publishComment(id, message) {
console.log('Id : ', id);
console.log('Message : ', message);
}
}
})
<link href="https://cdn.jsdelivr.net/npm/vuetify@2.x/dist/vuetify.min.css" rel="stylesheet">
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.4.0/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vue@2.x/dist/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vuetify@2.x/dist/vuetify.js"></script>
<div id="app">
<div v-for="post in posts" :post="post" :key="post.id">
<v-text-field v-model="post.message"></v-text-field>
<v-btn color="green" type="submit" v-on:click.prevent="publishComment(post.id, post.message)">Go!</v-btn>
</div>
</div>
我有这段代码:
<post v-for="post in posts" :post="post" :key="post.id">
<template v-slot:publishComment>
<v-text-field v-model="message"></v-text-field>
<v-btn color="green" type="submit" v-on:click.prevent="publishComment(post.id, message)">Go!</v-btn>
</template>
</post>
使用此代码,当我在输入中写入文本时,我看到相同的文本动态显示在所有输入中(由 v-for 创建),尽管当我单击 Go! 时,只发送了正确的文本。 所以问题是如何让输入的文本只出现在正确的输入中。 我想过使用条件 v-if 和焦点输入,但我没有设法实现它。
这是因为所有输入都具有与 v-model
相同的变量 (message
)。创建消息数组或将其添加到 post,如 post. message
.
一个观察: 当您动态创建输入时,每个输入的 v-model
应该不同。在您的示例代码中,您将相同的 message
绑定到每个输入 v-model
,每个输入应该不同。
工作演示:
const app = new Vue({
el: '#app',
data() {
return {
posts: [{
id: 1,
message: ''
}, {
id: 2,
message: ''
}, {
id: 3,
message: ''
}]
}
},
methods: {
publishComment(id, message) {
console.log('Id : ', id);
console.log('Message : ', message);
}
}
})
<link href="https://cdn.jsdelivr.net/npm/vuetify@2.x/dist/vuetify.min.css" rel="stylesheet">
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.4.0/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vue@2.x/dist/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vuetify@2.x/dist/vuetify.js"></script>
<div id="app">
<div v-for="post in posts" :post="post" :key="post.id">
<v-text-field v-model="post.message"></v-text-field>
<v-btn color="green" type="submit" v-on:click.prevent="publishComment(post.id, post.message)">Go!</v-btn>
</div>
</div>