4949 hint =" Validation starts after first blur"
5050 :rules =" [
5151 val => !!val || '* Required',
52- val => val.length < 2 || 'Please use maximum 1 character',
52+ val => val.length < 2 || 'Please use maximum 1 character'
5353 ]"
5454 lazy-rules
5555 />
5656
57+ <q-input
58+ ref =" input3"
59+ v-bind =" {[type]: true}"
60+ v-model =" model4"
61+ label =" Required, Len > 1, Len > 2"
62+ counter
63+ hint =" Multiple"
64+ :rules =" [
65+ val => !!val || '* Required',
66+ val => val.length > 1 || 'Please use min 1 characters',
67+ val => val.length > 2 || 'Please use min 2 characters'
68+ ]"
69+ />
70+
71+ <q-input
72+ ref =" input1"
73+ v-bind =" {[type]: true}"
74+ v-model =" model5"
75+ label =" Multiple - call stack test *"
76+ :rules =" [
77+ callRule1,
78+ void 0,
79+ callRule2
80+ ]"
81+ />
82+
83+ <q-input
84+ ref =" input1"
85+ v-bind =" {[type]: true}"
86+ v-model =" model6"
87+ label =" Multiple - async call stack test *"
88+ :rules =" [
89+ asyncCallRule1,
90+ asyncCallRule2
91+ ]"
92+ />
93+
94+ <div class =" text-h6 q-mt-xl" >
95+ Async rules
96+ </div >
97+ <q-input
98+ ref =" input1"
99+ v-bind =" {[type]: true}"
100+ v-model =" model7"
101+ label =" Only async *"
102+ :rules =" [
103+ asyncRule
104+ ]"
105+ />
106+
107+ <q-input
108+ ref =" input1"
109+ v-bind =" {[type]: true}"
110+ v-model =" model7"
111+ label =" Multiple async *"
112+ :rules =" [
113+ asyncRule,
114+ secondAsyncRule
115+ ]"
116+ />
117+
118+ <q-input
119+ ref =" input1"
120+ v-bind =" {[type]: true}"
121+ v-model =" model7"
122+ label =" Loading slot *"
123+ :rules =" [
124+ asyncRule
125+ ]"
126+ >
127+ <template v-slot :loading >
128+ <q-spinner-gears color =" purple" />
129+ </template >
130+ </q-input >
131+
132+ <q-input
133+ ref =" input1"
134+ v-bind =" {[type]: true}"
135+ v-model =" model7"
136+ debounce =" 1000"
137+ label =" X Mixed *"
138+ :rules =" [
139+ asyncRule,
140+ val => val.length > 2 || 'Please use min 3 characters'
141+ ]"
142+ />
143+
144+ <q-input
145+ ref =" input1"
146+ v-bind =" {[type]: true}"
147+ v-model =" model7"
148+ debounce =" 1000"
149+ label =" Debounced input *"
150+ :rules =" [
151+ asyncRule
152+ ]"
153+ />
154+
155+ <q-input
156+ ref =" input1"
157+ v-bind =" {[type]: true}"
158+ v-model =" model7"
159+ label =" Mixed, Lazy *"
160+ lazy-rules
161+ :rules =" [
162+ asyncRule,
163+ val => val.length > 2 || 'Please use min 3 characters'
164+ ]"
165+ />
166+
167+ <q-input
168+ ref =" input1"
169+ v-bind =" {[type]: true}"
170+ v-model =" model7"
171+ label =" Lazy async *"
172+ lazy-rules
173+ :rules =" [
174+ asyncRule
175+ ]"
176+ />
177+
57178 <div class =" text-h6 q-mt-xl" >
58179 External validation
59180 </div >
95216<script >
96217export default {
97218 data () {
98- const n = 3
219+ const n = 7
99220
100221 const data = {
101222 n,
@@ -117,6 +238,50 @@ export default {
117238 for (let i = 1 ; i <= this .n ; i++ ) {
118239 this .$refs [' input' + i].resetValidation ()
119240 }
241+ },
242+
243+ async asyncRule (val ) {
244+ return new Promise ((resolve , reject ) => {
245+ setTimeout (() => {
246+ resolve (!! val || ' * Required' )
247+ }, 1000 )
248+ })
249+ },
250+
251+ async secondAsyncRule (val ) {
252+ return new Promise ((resolve , reject ) => {
253+ setTimeout (() => {
254+ resolve ((val && val .length > 2 ) || ' Min 3 characters' )
255+ }, 1000 )
256+ })
257+ },
258+
259+ callRule1 (val ) {
260+ console .log (' call 1' )
261+ return false
262+ },
263+
264+ callRule2 (val ) {
265+ console .log (' call 2' )
266+ },
267+
268+ async asyncCallRule1 (val ) {
269+ console .log (' call async 1' )
270+ return new Promise ((resolve , reject ) => {
271+ setTimeout (() => {
272+ reject (new Error (' some err' ))
273+ // resolve(!!val || '* Required 1')
274+ }, 1000 )
275+ })
276+ },
277+
278+ async asyncCallRule2 (val ) {
279+ console .log (' call async 2' )
280+ return new Promise ((resolve , reject ) => {
281+ setTimeout (() => {
282+ resolve (!! val || ' * Required 2' )
283+ }, 1000 )
284+ })
120285 }
121286 }
122287}
0 commit comments