@@ -5,7 +5,34 @@ describe('Directive v-for', () => {
5
5
const vm = new Vue ( {
6
6
template : `
7
7
<div>
8
- <span v-for="item in list">{{$index}}-{{item}}</span>
8
+ <span v-for="item in list">{{item}}</span>
9
+ </div>
10
+ ` ,
11
+ data : {
12
+ list : [ 'a' , 'b' , 'c' ]
13
+ }
14
+ } ) . $mount ( )
15
+ expect ( vm . $el . innerHTML ) . toBe ( '<span>a</span><span>b</span><span>c</span>' )
16
+ Vue . set ( vm . list , 0 , 'd' )
17
+ waitForUpdate ( ( ) => {
18
+ expect ( vm . $el . innerHTML ) . toBe ( '<span>d</span><span>b</span><span>c</span>' )
19
+ vm . list . push ( 'd' )
20
+ } ) . then ( ( ) => {
21
+ expect ( vm . $el . innerHTML ) . toBe ( '<span>d</span><span>b</span><span>c</span><span>d</span>' )
22
+ vm . list . splice ( 1 , 2 )
23
+ } ) . then ( ( ) => {
24
+ expect ( vm . $el . innerHTML ) . toBe ( '<span>d</span><span>d</span>' )
25
+ vm . list = [ 'x' , 'y' ]
26
+ } ) . then ( ( ) => {
27
+ expect ( vm . $el . innerHTML ) . toBe ( '<span>x</span><span>y</span>' )
28
+ } ) . then ( done )
29
+ } )
30
+
31
+ it ( 'should render array of primitive values with index' , done => {
32
+ const vm = new Vue ( {
33
+ template : `
34
+ <div>
35
+ <span v-for="(item, i) in list">{{i}}-{{item}}</span>
9
36
</div>
10
37
` ,
11
38
data : {
@@ -32,7 +59,41 @@ describe('Directive v-for', () => {
32
59
const vm = new Vue ( {
33
60
template : `
34
61
<div>
35
- <span v-for="item in list">{{$index}}-{{item.value}}</span>
62
+ <span v-for="item in list">{{item.value}}</span>
63
+ </div>
64
+ ` ,
65
+ data : {
66
+ list : [
67
+ { value : 'a' } ,
68
+ { value : 'b' } ,
69
+ { value : 'c' }
70
+ ]
71
+ }
72
+ } ) . $mount ( )
73
+ expect ( vm . $el . innerHTML ) . toBe ( '<span>a</span><span>b</span><span>c</span>' )
74
+ Vue . set ( vm . list , 0 , { value : 'd' } )
75
+ waitForUpdate ( ( ) => {
76
+ expect ( vm . $el . innerHTML ) . toBe ( '<span>d</span><span>b</span><span>c</span>' )
77
+ vm . list [ 0 ] . value = 'e'
78
+ } ) . then ( ( ) => {
79
+ expect ( vm . $el . innerHTML ) . toBe ( '<span>e</span><span>b</span><span>c</span>' )
80
+ vm . list . push ( { } )
81
+ } ) . then ( ( ) => {
82
+ expect ( vm . $el . innerHTML ) . toBe ( '<span>e</span><span>b</span><span>c</span><span></span>' )
83
+ vm . list . splice ( 1 , 2 )
84
+ } ) . then ( ( ) => {
85
+ expect ( vm . $el . innerHTML ) . toBe ( '<span>e</span><span></span>' )
86
+ vm . list = [ { value : 'x' } , { value : 'y' } ]
87
+ } ) . then ( ( ) => {
88
+ expect ( vm . $el . innerHTML ) . toBe ( '<span>x</span><span>y</span>' )
89
+ } ) . then ( done )
90
+ } )
91
+
92
+ it ( 'should render array of object values with index' , done => {
93
+ const vm = new Vue ( {
94
+ template : `
95
+ <div>
96
+ <span v-for="(item, i) in list">{{i}}-{{item.value}}</span>
36
97
</div>
37
98
` ,
38
99
data : {
@@ -66,7 +127,31 @@ describe('Directive v-for', () => {
66
127
const vm = new Vue ( {
67
128
template : `
68
129
<div>
69
- <span v-for="val in obj">{{val}}-{{$key}}</span>
130
+ <span v-for="val in obj">{{val}}</span>
131
+ </div>
132
+ ` ,
133
+ data : {
134
+ obj : { a : 0 , b : 1 , c : 2 }
135
+ }
136
+ } ) . $mount ( )
137
+ expect ( vm . $el . innerHTML ) . toBe ( '<span>0</span><span>1</span><span>2</span>' )
138
+ vm . obj . a = 3
139
+ waitForUpdate ( ( ) => {
140
+ expect ( vm . $el . innerHTML ) . toBe ( '<span>3</span><span>1</span><span>2</span>' )
141
+ Vue . set ( vm . obj , 'd' , 4 )
142
+ } ) . then ( ( ) => {
143
+ expect ( vm . $el . innerHTML ) . toBe ( '<span>3</span><span>1</span><span>2</span><span>4</span>' )
144
+ Vue . delete ( vm . obj , 'a' )
145
+ } ) . then ( ( ) => {
146
+ expect ( vm . $el . innerHTML ) . toBe ( '<span>1</span><span>2</span><span>4</span>' )
147
+ } ) . then ( done )
148
+ } )
149
+
150
+ it ( 'should render an Object with key' , done => {
151
+ const vm = new Vue ( {
152
+ template : `
153
+ <div>
154
+ <span v-for="(val, key) in obj">{{val}}-{{key}}</span>
70
155
</div>
71
156
` ,
72
157
data : {
@@ -86,11 +171,35 @@ describe('Directive v-for', () => {
86
171
} ) . then ( done )
87
172
} )
88
173
174
+ it ( 'should render an Object with key and index' , done => {
175
+ const vm = new Vue ( {
176
+ template : `
177
+ <div>
178
+ <span v-for="(val, key, i) in obj">{{val}}-{{key}}-{{i}}</span>
179
+ </div>
180
+ ` ,
181
+ data : {
182
+ obj : { a : 0 , b : 1 , c : 2 }
183
+ }
184
+ } ) . $mount ( )
185
+ expect ( vm . $el . innerHTML ) . toBe ( '<span>0-a-0</span><span>1-b-1</span><span>2-c-2</span>' )
186
+ vm . obj . a = 3
187
+ waitForUpdate ( ( ) => {
188
+ expect ( vm . $el . innerHTML ) . toBe ( '<span>3-a-0</span><span>1-b-1</span><span>2-c-2</span>' )
189
+ Vue . set ( vm . obj , 'd' , 4 )
190
+ } ) . then ( ( ) => {
191
+ expect ( vm . $el . innerHTML ) . toBe ( '<span>3-a-0</span><span>1-b-1</span><span>2-c-2</span><span>4-d-3</span>' )
192
+ Vue . delete ( vm . obj , 'a' )
193
+ } ) . then ( ( ) => {
194
+ expect ( vm . $el . innerHTML ) . toBe ( '<span>1-b-0</span><span>2-c-1</span><span>4-d-2</span>' )
195
+ } ) . then ( done )
196
+ } )
197
+
89
198
it ( 'should render each key of data' , done => {
90
199
const vm = new Vue ( {
91
200
template : `
92
201
<div>
93
- <span v-for="val in $data">{{val}}-{{$ key}}</span>
202
+ <span v-for="( val, key) in $data">{{val}}-{{key}}</span>
94
203
</div>
95
204
` ,
96
205
data : { a : 0 , b : 1 , c : 2 }
@@ -102,109 +211,6 @@ describe('Directive v-for', () => {
102
211
} ) . then ( done )
103
212
} )
104
213
105
- describe ( 'alternative syntax' , ( ) => {
106
- it ( 'should render array of primitive values' , done => {
107
- const vm = new Vue ( {
108
- template : `
109
- <div>
110
- <span v-for="(i, item) in list">{{i}}-{{item}}</span>
111
- </div>
112
- ` ,
113
- data : {
114
- list : [ 'a' , 'b' , 'c' ]
115
- }
116
- } ) . $mount ( )
117
- expect ( vm . $el . innerHTML ) . toBe ( '<span>0-a</span><span>1-b</span><span>2-c</span>' )
118
- Vue . set ( vm . list , 0 , 'd' )
119
- waitForUpdate ( ( ) => {
120
- expect ( vm . $el . innerHTML ) . toBe ( '<span>0-d</span><span>1-b</span><span>2-c</span>' )
121
- vm . list . push ( 'd' )
122
- } ) . then ( ( ) => {
123
- expect ( vm . $el . innerHTML ) . toBe ( '<span>0-d</span><span>1-b</span><span>2-c</span><span>3-d</span>' )
124
- vm . list . splice ( 1 , 2 )
125
- } ) . then ( ( ) => {
126
- expect ( vm . $el . innerHTML ) . toBe ( '<span>0-d</span><span>1-d</span>' )
127
- vm . list = [ 'x' , 'y' ]
128
- } ) . then ( ( ) => {
129
- expect ( vm . $el . innerHTML ) . toBe ( '<span>0-x</span><span>1-y</span>' )
130
- } ) . then ( done )
131
- } )
132
-
133
- it ( 'should render array of object values' , done => {
134
- const vm = new Vue ( {
135
- template : `
136
- <div>
137
- <span v-for="(i, item) in list">{{i}}-{{item.value}}</span>
138
- </div>
139
- ` ,
140
- data : {
141
- list : [
142
- { value : 'a' } ,
143
- { value : 'b' } ,
144
- { value : 'c' }
145
- ]
146
- }
147
- } ) . $mount ( )
148
- expect ( vm . $el . innerHTML ) . toBe ( '<span>0-a</span><span>1-b</span><span>2-c</span>' )
149
- Vue . set ( vm . list , 0 , { value : 'd' } )
150
- waitForUpdate ( ( ) => {
151
- expect ( vm . $el . innerHTML ) . toBe ( '<span>0-d</span><span>1-b</span><span>2-c</span>' )
152
- vm . list [ 0 ] . value = 'e'
153
- } ) . then ( ( ) => {
154
- expect ( vm . $el . innerHTML ) . toBe ( '<span>0-e</span><span>1-b</span><span>2-c</span>' )
155
- vm . list . push ( { } )
156
- } ) . then ( ( ) => {
157
- expect ( vm . $el . innerHTML ) . toBe ( '<span>0-e</span><span>1-b</span><span>2-c</span><span>3-</span>' )
158
- vm . list . splice ( 1 , 2 )
159
- } ) . then ( ( ) => {
160
- expect ( vm . $el . innerHTML ) . toBe ( '<span>0-e</span><span>1-</span>' )
161
- vm . list = [ { value : 'x' } , { value : 'y' } ]
162
- } ) . then ( ( ) => {
163
- expect ( vm . $el . innerHTML ) . toBe ( '<span>0-x</span><span>1-y</span>' )
164
- } ) . then ( done )
165
- } )
166
-
167
- it ( 'should render an Object' , done => {
168
- const vm = new Vue ( {
169
- template : `
170
- <div>
171
- <span v-for="(k, v) in obj">{{v}}-{{k}}</span>
172
- </div>
173
- ` ,
174
- data : {
175
- obj : { a : 0 , b : 1 , c : 2 }
176
- }
177
- } ) . $mount ( )
178
- expect ( vm . $el . innerHTML ) . toBe ( '<span>0-a</span><span>1-b</span><span>2-c</span>' )
179
- vm . obj . a = 3
180
- waitForUpdate ( ( ) => {
181
- expect ( vm . $el . innerHTML ) . toBe ( '<span>3-a</span><span>1-b</span><span>2-c</span>' )
182
- Vue . set ( vm . obj , 'd' , 4 )
183
- } ) . then ( ( ) => {
184
- expect ( vm . $el . innerHTML ) . toBe ( '<span>3-a</span><span>1-b</span><span>2-c</span><span>4-d</span>' )
185
- Vue . delete ( vm . obj , 'a' )
186
- } ) . then ( ( ) => {
187
- expect ( vm . $el . innerHTML ) . toBe ( '<span>1-b</span><span>2-c</span><span>4-d</span>' )
188
- } ) . then ( done )
189
- } )
190
-
191
- it ( 'should render each key of data' , done => {
192
- const vm = new Vue ( {
193
- template : `
194
- <div>
195
- <span v-for="(k, v) in $data">{{v}}-{{k}}</span>
196
- </div>
197
- ` ,
198
- data : { a : 0 , b : 1 , c : 2 }
199
- } ) . $mount ( )
200
- expect ( vm . $el . innerHTML ) . toBe ( '<span>0-a</span><span>1-b</span><span>2-c</span>' )
201
- vm . a = 3
202
- waitForUpdate ( ( ) => {
203
- expect ( vm . $el . innerHTML ) . toBe ( '<span>3-a</span><span>1-b</span><span>2-c</span>' )
204
- } ) . then ( done )
205
- } )
206
- } )
207
-
208
214
it ( 'check priorities: v-if before v-for' , function ( ) {
209
215
const vm = new Vue ( {
210
216
data : {
@@ -285,8 +291,8 @@ describe('Directive v-for', () => {
285
291
} ,
286
292
template :
287
293
'<div>' +
288
- '<div v-for="(i, item ) in items">' +
289
- '<p v-for="subItem in item.items">{{$index }} {{subItem.a}} {{i}} {{item.a}}</p>' +
294
+ '<div v-for="(item, i ) in items">' +
295
+ '<p v-for="( subItem, j) in item.items">{{j }} {{subItem.a}} {{i}} {{item.a}}</p>' +
290
296
'</div>' +
291
297
'</div>'
292
298
} ) . $mount ( )
0 commit comments