1+ <template >
2+ <div >
3+
4+ <h3 >Input Number</h3 >
5+
6+ <strong >Options:</strong >
7+
8+ <div v-for =" opt in getOptions()" :key =" opt" >
9+ <span style =" display :inline-block ; width : 100px ; text-align :right ;" >
10+ {{ opt }}:</span > <input type =" input" v-model.number =" options[opt]" >
11+ </div >
12+
13+ <p >
14+ <strong >Try:</strong > <br >
15+ <input-number
16+ :step =" options.step"
17+ :min =" options.min"
18+ :max =" options.max"
19+ :maxlength =" options.maxlength"
20+ @onInputNumberChange =" inputChange" ></input-number >
21+ </p >
22+
23+ <strong >Value:</strong > <span >{{ inputValue }}</span >
24+
25+ </div >
26+ </template >
27+
28+ <script lang="ts">
29+ import Vue from ' vue'
30+ import Component from ' vue-class-component'
31+
32+ interface Options {
33+ step: number ,
34+ min: number ,
35+ max: number ,
36+ maxlength: number
37+ }
38+
39+ @Component
40+ export default class App extends Vue {
41+ options: Options = {
42+ step: 1 ,
43+ min: 1 ,
44+ max: 100 ,
45+ maxlength: 3
46+ }
47+
48+ inputValue: number = 1
49+
50+ getOptions () {
51+ return Object .keys (this .options )
52+ }
53+
54+ inputChange (val : number ) {
55+ this .inputValue = val
56+ }
57+ }
58+ </script >
59+
60+ <style >
61+ .v-input-number {
62+ position : relative ;
63+ display : block ;
64+ overflow : hidden ;
65+ width : 175px ;
66+ }
67+ .v-input-number * {
68+ box-sizing : border-box ;
69+ }
70+ .v-input-number-arrows {
71+ position : absolute ;
72+ width : 100% ;
73+ top : 0 ;
74+ right : 0 ;
75+ }
76+ .v-input-number-arrows > a {
77+ position : absolute ;
78+ top : 0 ;
79+ right : 2px ;
80+ background-color : #ccc ;
81+ border : 0 ;
82+ width : 28px ;
83+ height : 15px ;
84+ line-height : 1 ;
85+ text-align : center ;
86+ cursor : pointer ;
87+ }
88+ .v-input-number-arrows > a .v-input-number-up {
89+ top : 2px ;
90+ }
91+ .v-input-number-arrows > a .v-input-number-down {
92+ top : 18px ;
93+ }
94+ .v-input-number-arrows > a > i {
95+ display : inline-block ;
96+ height : 0 ;
97+ text-indent : -999em ;
98+ content : " " ;
99+ overflow : hidden ;
100+ position : relative ;
101+ vertical-align : baseline ;
102+ width : 0 ;
103+ border : 4px solid transparent ;
104+ }
105+ .v-input-number-arrows > a .v-input-number-up > i {
106+ top : -3px ;
107+ border : 4px solid transparent ;
108+ border-bottom-color : #333 ;
109+ }
110+ .v-input-number-arrows > a .v-input-number-down > i {
111+ border-top-color : #333 ;
112+ }
113+ .v-input-number-input {
114+ display : block ;
115+ padding : 5px 25px 5px 0 ;
116+ font-size : 16px ;
117+ background-color : #fff ;
118+ border : 1px solid #bbb ;
119+ text-align : center ;
120+ width : 100% ;
121+ height : 35px ;
122+ text-align : center ;
123+ }
124+ </style >
0 commit comments