@@ -52,6 +52,7 @@ export default {
52
52
selectedRows ( selectedRows , oldVal ) {
53
53
if ( this . selectable && ! looseEqual ( selectedRows , oldVal ) ) {
54
54
let items = [ ]
55
+ // forEach skips over non-existant indicies (on sparse arrays)
55
56
selectedRows . forEach ( ( v , idx ) => {
56
57
if ( v ) {
57
58
items . push ( this . computedItems [ idx ] )
@@ -107,11 +108,12 @@ export default {
107
108
this . clearSelected ( )
108
109
return
109
110
}
110
- let selected = ! this . selectedRows [ index ]
111
+ let selectedRows = this . selectedRows . slice ( )
112
+ let selected = ! selectedRows [ index ]
111
113
let mode = this . selectMode
112
114
// Note 'multi' mode needs no special handling
113
115
if ( mode === 'single' ) {
114
- this . selectedRows = [ ]
116
+ selectedRows = [ ]
115
117
} else if ( mode === 'range' ) {
116
118
if ( this . selectedLastRow > - 1 && evt . shiftKey ) {
117
119
// range
@@ -120,22 +122,22 @@ export default {
120
122
idx <= Math . max ( this . selectedLastRow , index ) ;
121
123
idx ++
122
124
) {
123
- this . selectedRows [ idx ] = true
124
125
// this.$set(this.selectedRows, idx, true)
126
+ selectedRows [ idx ] = true
125
127
}
126
128
selected = true
127
129
} else {
128
130
if ( ! ( evt . ctrlKey || evt . metaKey ) ) {
129
131
// clear range selection if any
130
- this . selectedRows = [ ]
132
+ selectedRows = [ ]
131
133
selected = true
132
134
}
133
135
this . selectedLastRow = selected ? index : - 1
134
136
}
135
137
}
136
138
// this.$set(this.selectedRows, index, selected)
137
- this . selectedRows [ index ] = selected
138
- this . selectedRows = this . selectedRows . slice ( )
139
+ selectedRows [ index ] = selected
140
+ this . selectedRows = selectedRows
139
141
}
140
142
}
141
143
}
0 commit comments