1๐
โ
I think it would be easiest to use v-if
and v-else
for this.. With that being said, I have also provided an example of how to handle this without v-if
and v-else
..
Using v-if
and v-else
:
new Vue({
el: "#root",
data: {
actions: [
{
name: "first",
weekly: true,
enabled: false
},
{
name: "second",
enabled: false
},
{
name: "third",
weekly: true,
enabled: true
},
{
name: "fourth",
enabled: true
}
]
},
template: `
<tbody>
<tr v-for="(action, ndx) in actions" >
<td class="pointer" @click='console.log(action, ndx)'>{{action.name}}</td>
<input v-if="'weekly' in action" type="checkbox" v-model="action.weekly" @change="handleEnableChanged($event, ndx)"/>
<input v-else type="checkbox" checked="true" @change="handleEnableChanged($event, ndx)"/>
</td>
<input type="checkbox" v-model="action.enabled" @change="handleEnableChanged($event, ndx)">
</td>
</tr>
</tbody>
`,
methods: {
handleEnableChanged(evt, ndx) {
console.log(evt, ndx);
},
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.10/vue.min.js"></script>
<div id="root"></div>
Without v-if
and v-else
:
new Vue({
el: "#root",
data: {
actions: ""
},
template: `
<tbody>
<tr v-for="(action, ndx) in actions" >
<td class="pointer" @click='console.log(action, ndx)'>{{action.name}}</td>
<input type="checkbox" v-model="action.weekly" @change="handleEnableChanged($event, ndx)"/>
</td>
<input type="checkbox" v-model="action.enabled" @change="handleEnableChanged($event, ndx)">
</td>
</tr>
</tbody>
`,
methods: {
handleEnableChanged(evt, ndx) {
console.log(evt, ndx);
},
getActions() {
let originalActions = [
{
name: "first",
weekly: true,
enabled: false
},
{
name: "second",
enabled: false
},
{
name: "third",
weekly: true,
enabled: true
},
{
name: "fourth",
enabled: true
}
];
this.actions = originalActions.map(a => {
return {
name: a.name,
weekly: 'weekly' in a ? a.weekly : true,
enabled: a.enabled
}
})
}
},
created() {
this.getActions();
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.10/vue.min.js"></script>
<div id="root"></div>
๐คMatt Oestreich
0๐
If you want all items in the array to have an action.weekly
property, then update your data when it is initially retrieved. You can then just use v-model="action.weekly"
for all items in the array.
this.newArray = this.oldArray.map(item => {
if(!item.hasOwnProperty('weekly')){
item.weekly = true;
}
return item
})
๐คpaddyfields
0๐
You can just do this:
<input type="checkbox" :checked="!!action.weekly">
The !!
operator will return true
if the value is not undefined or empty
๐คAlekseyHoffman
Source:stackexchange.com