Skip to content

Commit c0726dc

Browse files
committed
number option for v-select (fixes vuejs#642)
1 parent fb38b24 commit c0726dc

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed

src/directives/model/select.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,15 @@ module.exports = {
1111
if (optionsParam) {
1212
initOptions.call(this, optionsParam)
1313
}
14+
this.number = this._checkParam('number') != null
1415
this.multiple = el.hasAttribute('multiple')
1516
this.listener = function () {
1617
var value = self.multiple
1718
? getMultiValue(el)
1819
: el.value
20+
value = self.number
21+
? _.toNumber(value)
22+
: value
1923
self.set(value, true)
2024
}
2125
_.on(el, 'change', this.listener)
@@ -124,7 +128,9 @@ function checkInitialValue () {
124128
}
125129
}
126130
if (initValue) {
127-
this._initValue = initValue
131+
this._initValue = this.number
132+
? _.toNumber(initValue)
133+
: initValue
128134
}
129135
}
130136

test/unit/specs/directives/model_spec.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,30 @@ if (_.inBrowser) {
273273
expect(opts[2].selected).toBe(false)
274274
})
275275

276+
it('select + number', function () {
277+
var vm = new Vue({
278+
el: el,
279+
data: {
280+
test: '1'
281+
},
282+
template: '<select v-model="test" number><option value="1">1</option></select>'
283+
})
284+
expect(vm.test).toBe('1')
285+
trigger(vm.$el.firstChild, 'change')
286+
expect(vm.test).toBe(1)
287+
})
288+
289+
it('select + number initial value', function () {
290+
var vm = new Vue({
291+
el: el,
292+
data: {
293+
test: '1'
294+
},
295+
template: '<select v-model="test" number><option value="1" selected>1</option></select>'
296+
})
297+
expect(vm.test).toBe(1)
298+
})
299+
276300
it('text', function (done) {
277301
var vm = new Vue({
278302
el: el,

0 commit comments

Comments
 (0)