1 回答

TA貢獻1963條經(jīng)驗 獲得超6個贊
因為與中的元素user.has_items相比,中的元素有一些額外的格式items,所以我認為v-model這不是一個真正的選擇。在選中復(fù)選框和將其推送到用戶數(shù)組item之間,您需要空間來進行某種轉(zhuǎn)換。has_itemproject
您可以通過將 v-model 換成更手動的選項來騰出空間:事件。在我這里的示例中,我使用change事件來觸發(fā)一個方法,該方法根據(jù)復(fù)選框是否被選中來添加或刪除項目。
我用另一種方法設(shè)置復(fù)選框的初始值。此方法檢查復(fù)選框的關(guān)聯(lián)項目是否在用戶的項目數(shù)組中。
var demo = new Vue({
el: '#app',
data: {
user: {
email: 'test@test.com',
has_items: [
{ "id": 19, "userId": 63, "projectId": 1, "project": { "id": 1, "titel": "Project1" } },
{ "id": 20, "userId": 63, "projectId": 2, "project": { "id": 2, "titel": "Project2" } }
]
},
items: [
{ "label": "Project1", "titel": "Project1", "projectId": 1 },
{ "label": "Project2", "titel": "Project2", "projectId": 2 },
{ "label": "Project3", "titel": "Project3", "projectId": 3 }
]
},
methods: {
userHasItem(project) {
return this.user.has_items.find(e => e.projectId == project.projectId) != undefined;
},
updateHasItems(checked, project) {
if (checked) {
// Add item to user.has_items
// [Translation between item and has_item goes here]
this.user.has_items.push(project);
}
else {
// Remove item from user.has_items based on ID
this.user.has_items.splice(this.user.has_items.findIndex(e => e.projectId == project.projectId), 1);
}
},
},
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.min.js"></script>
<div id="app">
<div v-for="project in items" :key="project.projectId">
<label>{{project.titel}}</label>
<input type="checkbox" :checked="userHasItem(project)" :value="project" @change="updateHasItems($event.target.checked, project)"/>
</div>
<p>User's items</p>
{{user.has_items}}
</div>
添加回答
舉報