Skip to content

Commit 5596575

Browse files
committedNov 1, 2017
fix(MdField): make v-model work with vue 2.5.x
1 parent 9daa006 commit 5596575

File tree

9 files changed

+98
-88
lines changed

9 files changed

+98
-88
lines changed
 

‎docs/app/pages/Components/Input/examples/Counters.vue

+13-7
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,34 @@
22
<div>
33
<md-field>
44
<label>Regular Field</label>
5-
<md-input maxlength="30"></md-input>
5+
<md-input v-model="regular" maxlength="30"></md-input>
66
</md-field>
77

88
<md-field :md-counter="false">
99
<label>Maxlength with disabled counter</label>
10-
<md-input maxlength="10"></md-input>
10+
<md-input v-model="disabled" maxlength="10"></md-input>
1111
</md-field>
1212

1313
<md-field>
1414
<label>Autogrow</label>
15-
<md-textarea md-autogrow maxlength="200"></md-textarea>
15+
<md-textarea v-model="autogrow" md-autogrow maxlength="200"></md-textarea>
1616
</md-field>
1717

1818
<md-field>
1919
<label>Textarea</label>
20-
<md-textarea maxlength="80"></md-textarea>
20+
<md-textarea v-model="textarea" maxlength="80"></md-textarea>
2121
</md-field>
2222
</div>
2323
</template>
2424

2525
<script>
26-
export default {
27-
name: 'Counters'
28-
}
26+
export default {
27+
name: 'Counters',
28+
data: () => ({
29+
regular: null,
30+
disabled: null,
31+
autogrow: null,
32+
textarea: null
33+
})
34+
}
2935
</script>

‎docs/app/pages/Components/Input/examples/ErrorsMessages.vue

+16-13
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,18 @@
22
<div>
33
<md-field>
44
<label>No error</label>
5-
<md-input></md-input>
5+
<md-input v-model="noError"></md-input>
66
</md-field>
77

88
<md-field :class="messageClass">
99
<label>Required Field</label>
10-
<md-input required></md-input>
10+
<md-input v-model="required" required></md-input>
1111
<span class="md-error">There is an error</span>
1212
</md-field>
1313

1414
<md-field :class="messageClass">
1515
<label>Textarea</label>
16-
<md-textarea required></md-textarea>
16+
<md-textarea v-model="textarea" required></md-textarea>
1717
<span class="md-helper-text">Helper text</span>
1818
<span class="md-error">There is an error</span>
1919
</md-field>
@@ -23,17 +23,20 @@
2323
</template>
2424

2525
<script>
26-
export default {
27-
name: 'ErrorsMessages',
28-
data: () => ({
29-
hasMessages: false
30-
}),
31-
computed: {
32-
messageClass () {
33-
return {
34-
'md-invalid': this.hasMessages
26+
export default {
27+
name: 'ErrorsMessages',
28+
data: () => ({
29+
noError: null,
30+
required: null,
31+
textarea: null,
32+
hasMessages: false
33+
}),
34+
computed: {
35+
messageClass () {
36+
return {
37+
'md-invalid': this.hasMessages
38+
}
3539
}
3640
}
3741
}
38-
}
3942
</script>

‎docs/app/pages/Components/Input/examples/FieldIcons.vue

+11-5
Original file line numberDiff line numberDiff line change
@@ -3,33 +3,39 @@
33
<md-field>
44
<md-icon>event</md-icon>
55
<label>Date</label>
6-
<md-input></md-input>
6+
<md-input v-model="date"></md-input>
77
</md-field>
88

99
<md-field>
1010
<label>Voice</label>
11-
<md-input></md-input>
11+
<md-input v-model="voice"></md-input>
1212
<md-icon>keyboard_voice</md-icon>
1313
</md-field>
1414

1515
<md-field>
1616
<label>Description</label>
17-
<md-textarea></md-textarea>
17+
<md-textarea v-model="description"></md-textarea>
1818
<md-icon>description</md-icon>
1919
</md-field>
2020

2121
<md-field>
2222
<md-icon class="md-accent">warning</md-icon>
2323
<label>Transfer Money</label>
24-
<md-input></md-input>
24+
<md-input v-model="money"></md-input>
2525
<md-icon>attach_money</md-icon>
2626
</md-field>
2727
</div>
2828
</template>
2929

3030
<script>
3131
export default {
32-
name: 'FieldIcons'
32+
name: 'FieldIcons',
33+
data: () => ({
34+
date: null,
35+
voice: null,
36+
description: null,
37+
money: null
38+
})
3339
}
3440
</script>
3541

‎docs/app/pages/Components/Input/examples/InlineActions.vue

+12-12
Original file line numberDiff line numberDiff line change
@@ -7,28 +7,28 @@
77

88
<md-field>
99
<label>Password toggle</label>
10-
<md-input type="password" v-model="password"></md-input>
10+
<md-input v-model="password" type="password"></md-input>
1111
</md-field>
1212

1313
<md-field :md-toggle-password="false">
1414
<label>Password field without toggle</label>
15-
<md-input type="password" v-model="password"></md-input>
15+
<md-input v-model="password" type="password"></md-input>
1616
</md-field>
1717
</div>
1818
</template>
1919

20+
<script>
21+
export default {
22+
name: 'Icons',
23+
data: () => ({
24+
initial: 'Initial Value',
25+
password: 'mysecurepassword'
26+
})
27+
}
28+
</script>
29+
2030
<style lang="scss" scoped>
2131
.md-field:last-child {
2232
margin-bottom: 40px;
2333
}
2434
</style>
25-
26-
<script>
27-
export default {
28-
name: 'Icons',
29-
data: () => ({
30-
initial: 'Initial Value',
31-
password: 'mysecurepassword'
32-
})
33-
}
34-
</script>

‎docs/app/pages/Components/Input/examples/TextFields.vue

+20-13
Original file line numberDiff line numberDiff line change
@@ -12,47 +12,54 @@
1212

1313
<md-field>
1414
<label>Type here!</label>
15-
<md-input></md-input>
15+
<md-input v-model="type"></md-input>
1616
<span class="md-helper-text">Helper text</span>
1717
</md-field>
1818

1919
<md-field>
2020
<label>With label</label>
21-
<md-input placeholder="A nice placeholder"></md-input>
21+
<md-input v-model="withLabel" placeholder="A nice placeholder"></md-input>
2222
</md-field>
2323

2424
<md-field md-inline>
2525
<label>Inline</label>
26-
<md-input></md-input>
26+
<md-input v-model="inline"></md-input>
2727
</md-field>
2828

2929
<md-field>
3030
<label>Number</label>
31-
<md-input type="number"></md-input>
31+
<md-input v-model="number" type="number"></md-input>
3232
</md-field>
3333

3434
<md-field>
3535
<label>Textarea</label>
36-
<md-textarea></md-textarea>
36+
<md-textarea v-model="textarea"></md-textarea>
3737
</md-field>
3838

3939
<md-field>
4040
<label>Textarea with Autogrow</label>
41-
<md-textarea md-autogrow></md-textarea>
41+
<md-textarea v-model="autogrow" md-autogrow></md-textarea>
4242
</md-field>
4343

4444
<md-field>
4545
<label>Disabled</label>
46-
<md-input disabled></md-input>
46+
<md-input v-model="disabled" disabled></md-input>
4747
</md-field>
4848
</div>
4949
</template>
5050

5151
<script>
52-
export default {
53-
name: 'TextFields',
54-
data: () => ({
55-
initial: 'Initial Value'
56-
})
57-
}
52+
export default {
53+
name: 'TextFields',
54+
data: () => ({
55+
initial: 'Initial Value',
56+
type: null,
57+
withLabel: null,
58+
inline: null,
59+
number: null,
60+
textarea: null,
61+
autogrow: null,
62+
disabled: null
63+
})
64+
}
5865
</script>

‎src/components/MdField/MdFieldMixin.js

+20-19
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,28 @@
11
export default {
22
props: {
3-
value: [String, Number, Date, Array],
3+
value: {
4+
required: true
5+
},
46
placeholder: String,
57
maxlength: [String, Number],
68
readonly: Boolean,
79
required: Boolean,
810
disabled: Boolean
911
},
10-
data () {
11-
return {
12-
textareaHeight: false,
13-
content: this.value || null
14-
}
15-
},
12+
data: () => ({
13+
textareaHeight: false
14+
}),
1615
computed: {
16+
model: {
17+
get () {
18+
return this.value
19+
},
20+
set (val) {
21+
this.$nextTick(() => {
22+
this.$emit('input', val)
23+
})
24+
}
25+
},
1726
clear () {
1827
return this.MdField.clear
1928
},
@@ -32,8 +41,7 @@ export default {
3241
}
3342
},
3443
watch: {
35-
value (value) {
36-
this.content = value
44+
model () {
3745
this.setFieldValue()
3846
},
3947
clear (clear) {
@@ -57,7 +65,7 @@ export default {
5765
methods: {
5866
clearField () {
5967
this.$el.value = ''
60-
this.content = ''
68+
this.model = ''
6169
this.setFieldValue()
6270
},
6371
setLabelFor () {
@@ -73,9 +81,8 @@ export default {
7381
}
7482
}
7583
},
76-
setFieldValue () {
77-
this.$emit('input', this.content)
78-
this.MdField.value = this.content
84+
setFieldValue (value) {
85+
this.MdField.value = this.model
7986
},
8087
setPlaceholder () {
8188
this.MdField.placeholder = Boolean(this.placeholder)
@@ -94,12 +101,6 @@ export default {
94101
},
95102
onBlur () {
96103
this.MdField.focused = false
97-
},
98-
onInput () {
99-
const newValue = this.$el ? this.$el.value : this.content
100-
101-
this.$emit('input', newValue)
102-
this.MdField.value = newValue
103104
}
104105
},
105106
created () {

‎src/components/MdField/MdFile/MdFile.vue

+2-3
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<input
66
class="md-input"
77
readonly
8-
v-model="content"
8+
v-model="model"
99
v-bind="{ disabled, required, placeholder }"
1010
@focus="openPicker"
1111
@blur="onBlur">
@@ -67,9 +67,8 @@
6767
onFileSelected ({ target, dataTransfer }) {
6868
const files = target.files || dataTransfer.files
6969
70-
this.content = this.getFileName(files, target)
70+
this.model = this.getFileName(files, target)
7171
this.$emit('md-change', files || target.value)
72-
this.$emit('input', this.content)
7372
}
7473
},
7574
created () {

‎src/components/MdField/MdInput/MdInput.vue

+2-13
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,11 @@
11
<template>
22
<input
33
class="md-input"
4-
v-model="content"
5-
v-bind="attributes"
6-
@focus="onFocus"
7-
@blur="onBlur"
8-
@input="onInput"
9-
@change="onInput">
10-
11-
<!-- <input
12-
class="md-input"
13-
v-model="content"
4+
v-model="model"
145
v-bind="attributes"
156
v-on="$listeners"
167
@focus="onFocus"
17-
@blur="onBlur"
18-
@input="onInput"
19-
@change="onInput"> -->
8+
@blur="onBlur">
209
</template>
2110

2211
<script>

‎src/components/MdField/MdTextarea/MdTextarea.vue

+2-3
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,11 @@
22
<textarea
33
class="md-textarea"
44
:style="textareaStyles"
5-
v-model="content"
5+
v-model="model"
66
v-bind="attributes"
77
v-on="$listeners"
88
@focus="onFocus"
9-
@blur="onBlur"
10-
@input="onInput">
9+
@blur="onBlur">
1110
</textarea>
1211
</template>
1312

0 commit comments

Comments
 (0)