Commit c97c42ab2e4e954aa62fc846b7473f8462353d8c
1 parent
456daf34
support InputNumber
support InputNumber
Showing
8 changed files
with
50 additions
and
14 deletions
Show diff stats
CHANGE.md
@@ -11,4 +11,6 @@ value 改为了 label,使用 v-model,废弃 checked | @@ -11,4 +11,6 @@ value 改为了 label,使用 v-model,废弃 checked | ||
11 | ### Switch | 11 | ### Switch |
12 | 废弃checked, 改为了 value,使用 v-model | 12 | 废弃checked, 改为了 value,使用 v-model |
13 | ### Badge | 13 | ### Badge |
14 | -class 改为了 className | ||
15 | \ No newline at end of file | 14 | \ No newline at end of file |
15 | +class 改为了 className | ||
16 | +### InputNumber | ||
17 | +使用 v-model | ||
16 | \ No newline at end of file | 18 | \ No newline at end of file |
README.md
src/components/input-number/input-number.vue
@@ -92,7 +92,8 @@ | @@ -92,7 +92,8 @@ | ||
92 | return { | 92 | return { |
93 | focused: false, | 93 | focused: false, |
94 | upDisabled: false, | 94 | upDisabled: false, |
95 | - downDisabled: false | 95 | + downDisabled: false, |
96 | + currentValue: this.value | ||
96 | }; | 97 | }; |
97 | }, | 98 | }, |
98 | computed: { | 99 | computed: { |
@@ -164,7 +165,7 @@ | @@ -164,7 +165,7 @@ | ||
164 | } | 165 | } |
165 | 166 | ||
166 | const targetVal = Number(e.target.value); | 167 | const targetVal = Number(e.target.value); |
167 | - let val = Number(this.value); | 168 | + let val = Number(this.currentValue); |
168 | const step = Number(this.step); | 169 | const step = Number(this.step); |
169 | if (isNaN(val)) { | 170 | if (isNaN(val)) { |
170 | return false; | 171 | return false; |
@@ -196,9 +197,11 @@ | @@ -196,9 +197,11 @@ | ||
196 | }, | 197 | }, |
197 | setValue (val) { | 198 | setValue (val) { |
198 | this.$nextTick(() => { | 199 | this.$nextTick(() => { |
199 | - this.value = val; | 200 | + this.currentValue = val; |
201 | + this.$emit('input', val); | ||
200 | this.$emit('on-change', val); | 202 | this.$emit('on-change', val); |
201 | - this.$dispatch('on-form-change', val); | 203 | + // todo 事件 |
204 | +// this.$dispatch('on-form-change', val); | ||
202 | }); | 205 | }); |
203 | }, | 206 | }, |
204 | focus () { | 207 | focus () { |
@@ -224,7 +227,7 @@ | @@ -224,7 +227,7 @@ | ||
224 | 227 | ||
225 | if (isValueNumber(val)) { | 228 | if (isValueNumber(val)) { |
226 | val = Number(val); | 229 | val = Number(val); |
227 | - this.value = val; | 230 | + this.currentValue = val; |
228 | 231 | ||
229 | if (val > max) { | 232 | if (val > max) { |
230 | this.setValue(max); | 233 | this.setValue(max); |
@@ -234,7 +237,7 @@ | @@ -234,7 +237,7 @@ | ||
234 | this.setValue(val); | 237 | this.setValue(val); |
235 | } | 238 | } |
236 | } else { | 239 | } else { |
237 | - event.target.value = this.value; | 240 | + event.target.value = this.currentValue; |
238 | } | 241 | } |
239 | }, | 242 | }, |
240 | changeVal (val) { | 243 | changeVal (val) { |
@@ -250,11 +253,14 @@ | @@ -250,11 +253,14 @@ | ||
250 | } | 253 | } |
251 | } | 254 | } |
252 | }, | 255 | }, |
253 | - compiled () { | ||
254 | - this.changeVal(this.value); | 256 | + mounted () { |
257 | + this.changeVal(this.currentValue); | ||
255 | }, | 258 | }, |
256 | watch: { | 259 | watch: { |
257 | value (val) { | 260 | value (val) { |
261 | + this.currentValue = val; | ||
262 | + }, | ||
263 | + currentValue (val) { | ||
258 | this.changeVal(val); | 264 | this.changeVal(val); |
259 | } | 265 | } |
260 | } | 266 | } |
src/index.js
@@ -18,7 +18,7 @@ import Checkbox from './components/checkbox'; | @@ -18,7 +18,7 @@ import Checkbox from './components/checkbox'; | ||
18 | // import Form from './components/form'; | 18 | // import Form from './components/form'; |
19 | import Icon from './components/icon'; | 19 | import Icon from './components/icon'; |
20 | import Input from './components/input'; | 20 | import Input from './components/input'; |
21 | -// import InputNumber from './components/input-number'; | 21 | +import InputNumber from './components/input-number'; |
22 | // import LoadingBar from './components/loading-bar'; | 22 | // import LoadingBar from './components/loading-bar'; |
23 | // import Menu from './components/menu'; | 23 | // import Menu from './components/menu'; |
24 | // import Message from './components/message'; | 24 | // import Message from './components/message'; |
@@ -74,7 +74,7 @@ const iview = { | @@ -74,7 +74,7 @@ const iview = { | ||
74 | Icon, | 74 | Icon, |
75 | // iInput: Input, | 75 | // iInput: Input, |
76 | Input, | 76 | Input, |
77 | - // InputNumber, | 77 | + InputNumber, |
78 | // LoadingBar, | 78 | // LoadingBar, |
79 | // Menu, | 79 | // Menu, |
80 | // MenuGroup: Menu.Group, | 80 | // MenuGroup: Menu.Group, |
test/app.vue
@@ -25,6 +25,7 @@ li + li { border-left: solid 1px #bbb; padding-left: 10px; margin-left: 10px; } | @@ -25,6 +25,7 @@ li + li { border-left: solid 1px #bbb; padding-left: 10px; margin-left: 10px; } | ||
25 | <li><router-link to="/alert">Alert</router-link></li> | 25 | <li><router-link to="/alert">Alert</router-link></li> |
26 | <li><router-link to="/badge">Badge</router-link></li> | 26 | <li><router-link to="/badge">Badge</router-link></li> |
27 | <li><router-link to="/tag">Tag</router-link></li> | 27 | <li><router-link to="/tag">Tag</router-link></li> |
28 | + <li><router-link to="/input-number">InputNumber</router-link></li> | ||
28 | </ul> | 29 | </ul> |
29 | </nav> | 30 | </nav> |
30 | <router-view></router-view> | 31 | <router-view></router-view> |
test/main.js
@@ -64,6 +64,10 @@ const router = new VueRouter({ | @@ -64,6 +64,10 @@ const router = new VueRouter({ | ||
64 | { | 64 | { |
65 | path: '/tag', | 65 | path: '/tag', |
66 | component: require('./routers/tag.vue') | 66 | component: require('./routers/tag.vue') |
67 | + }, | ||
68 | + { | ||
69 | + path: '/input-number', | ||
70 | + component: require('./routers/input-number.vue') | ||
67 | } | 71 | } |
68 | ] | 72 | ] |
69 | }); | 73 | }); |
1 | +<template> | ||
2 | + <div> | ||
3 | + <Input-number :max="10" :min="-1" v-model="v1"></Input-number> | ||
4 | + {{ v1 }} | ||
5 | + <div @click="c">change v1</div> | ||
6 | + <Input-number disabled :max="10" :min="1" :step="1.2" v-model="v2"></Input-number> | ||
7 | + </div> | ||
8 | +</template> | ||
9 | +<script> | ||
10 | + export default { | ||
11 | + props: {}, | ||
12 | + data () { | ||
13 | + return { | ||
14 | + v1: 1, | ||
15 | + v2: 1 | ||
16 | + }; | ||
17 | + }, | ||
18 | + computed: {}, | ||
19 | + methods: { | ||
20 | + c () { | ||
21 | + this.v1 = 5; | ||
22 | + } | ||
23 | + } | ||
24 | + }; | ||
25 | +</script> | ||
0 | \ No newline at end of file | 26 | \ No newline at end of file |
test/routers/tag.vue
@@ -35,9 +35,7 @@ | @@ -35,9 +35,7 @@ | ||
35 | </div> | 35 | </div> |
36 | </template> | 36 | </template> |
37 | <script> | 37 | <script> |
38 | - import { Tag, Modal, iButton } from 'iview'; | ||
39 | export default { | 38 | export default { |
40 | - components: { Tag, Modal, iButton }, | ||
41 | data () { | 39 | data () { |
42 | return { | 40 | return { |
43 | modal1: false, | 41 | modal1: false, |