Vuejs2 v-model/v-bind的事件驱动绑定/重新绑定?
我真的在为如何实现一个与“Vue哲学”相一致的模式而苦苦挣扎 想象一个你想要编辑的项目列表。关于如何“内联”编辑这些项目,有很多例子。但是我想通过相同的、持久的表单编辑我的项目。因此,当您单击列表项时,表单输入“重新绑定”到单击的列表项 下面是一个工作示例:它使用一个方法(updateRecord)将表单输入(绑定到editRecord)复制到引用的li的数据绑定(messages[index])Vuejs2 v-model/v-bind的事件驱动绑定/重新绑定?,vuejs2,Vuejs2,我真的在为如何实现一个与“Vue哲学”相一致的模式而苦苦挣扎 想象一个你想要编辑的项目列表。关于如何“内联”编辑这些项目,有很多例子。但是我想通过相同的、持久的表单编辑我的项目。因此,当您单击列表项时,表单输入“重新绑定”到单击的列表项 下面是一个工作示例:它使用一个方法(updateRecord)将表单输入(绑定到editRecord)复制到引用的li的数据绑定(messages[index]) 寻找关于如何更好地实现此模式的见解。谢谢 按照惯例,在这种情况下,您实际上不需要任何方法。您可以直
寻找关于如何更好地实现此模式的见解。谢谢 按照惯例,在这种情况下,您实际上不需要任何方法。您可以直接在模板中设置
editRecord
。此外,如果将editRecord
设置为所选的消息
,则您甚至不需要更新按钮或跟踪索引
var app = new Vue({
el: '#app',
data: {
editRecord:{ name: null, message: null },
messages: [
{ name: "Dale Cooper", message: "Black as midnight on a moonless night" },
{ name: "Shelly Johnson", message: "I've got one man too many in my life and I'm married to him." },
{ name: "Sheriff Truman", message: "Jelly donuts?"}
]
}
});
这些是我对您的模板所做的更改
<div id="app">
<div class="messages">
<ul>
<li class="message" v-for="(message, index) in messages" @click="editRecord = message">
<div class="message__name">
{{message.name}}
</div>
<div class="message__body">
{{message.message}}
</div>
</li>
</ul>
</div>
<div class="edit-form" v-if="editRecord">
<label for="name">Name</label>
<input name="name" type="text" placeholder="Name" v-model="editRecord.name">
<label for="message">Message</label>
<textarea name="message" id="" cols="30" rows="6" v-model="editRecord.message"></textarea>
</div>
</div>
名称
消息
这是您的最新信息
结果利用了Vue的反应性,当您在表单中编辑时,也可以看到列表中发生的更改
不过,有些人可能会喜欢您所采取的方法,他们所做的编辑只有在指定完成后才能完成。这在很大程度上取决于品味
但是,我要警告您不要使用
索引来跟踪您选择的记录。如果列表在您下面更改,则索引也会更改。在消息上使用id
属性。不过,如果你采用反应式方法,你并不真正需要它。习惯地说,在这种情况下,你并不真正需要任何方法。您可以直接在模板中设置editRecord
。此外,如果将editRecord
设置为所选的消息
,则您甚至不需要更新按钮或跟踪索引
var app = new Vue({
el: '#app',
data: {
editRecord:{ name: null, message: null },
messages: [
{ name: "Dale Cooper", message: "Black as midnight on a moonless night" },
{ name: "Shelly Johnson", message: "I've got one man too many in my life and I'm married to him." },
{ name: "Sheriff Truman", message: "Jelly donuts?"}
]
}
});
这些是我对您的模板所做的更改
<div id="app">
<div class="messages">
<ul>
<li class="message" v-for="(message, index) in messages" @click="editRecord = message">
<div class="message__name">
{{message.name}}
</div>
<div class="message__body">
{{message.message}}
</div>
</li>
</ul>
</div>
<div class="edit-form" v-if="editRecord">
<label for="name">Name</label>
<input name="name" type="text" placeholder="Name" v-model="editRecord.name">
<label for="message">Message</label>
<textarea name="message" id="" cols="30" rows="6" v-model="editRecord.message"></textarea>
</div>
</div>
名称
消息
这是您的最新信息
结果利用了Vue的反应性,当您在表单中编辑时,也可以看到列表中发生的更改
不过,有些人可能会喜欢您所采取的方法,他们所做的编辑只有在指定完成后才能完成。这在很大程度上取决于品味
但是,我要警告您不要使用索引来跟踪您选择的记录。如果列表在您下面更改,则索引也会更改。在消息上使用id
属性。不过,如果您采用反应式方法,您并不真正需要它。首先,谢谢您。这看起来很简单,也很令人兴奋。我可能是想得太多了。真正新奇有趣的是如何在editRecord和消息之间建立“链接”。仅从您的简单示例中,我就学到了很多关于Vue的知识。@monopineu这主要是学习从数据驱动的方法进行思考,或者思考如何根据给定的状态呈现UI,而不是强制执行操作。首先,谢谢您。这看起来很简单,也很令人兴奋。我可能是想得太多了。真正新奇有趣的是如何在editRecord和消息之间建立“链接”。我从您的简单示例中学到了很多关于Vue的知识。@monopineu主要是学习从数据驱动的方法进行思考,或者思考如何根据给定的状态呈现UI,而不是强制执行操作。