File tree Expand file tree Collapse file tree 4 files changed +54
-1
lines changed
packages/babel-plugin-jsx Expand file tree Collapse file tree 4 files changed +54
-1
lines changed Original file line number Diff line number Diff line change @@ -162,10 +162,14 @@ const App = {
162162
163163```jsx
164164<input v-model={[val, [' modifier' ]]} />
165+ // 或者
166+ <input v-model_modifier={val} />
165167```
166168
167169```jsx
168170<A v-model={[val, ' argument' , [' modifier' ]]} />
171+ // 或者
172+ <input v-model:argument_modifier={val} />
169173```
170174
171175会编译成:
Original file line number Diff line number Diff line change @@ -166,10 +166,14 @@ const App = {
166166
167167```jsx
168168<input v-model={[val, [' modifier' ]]} />
169+ // Or
170+ <input v-model_modifier={val} />
169171```
170172
171173```jsx
172174<A v-model={[val, ' argument' , [' modifier' ]]} />
175+ // Or
176+ <input v-model:argument_modifier={val} />
173177```
174178
175179Will compile to:
Original file line number Diff line number Diff line change @@ -67,7 +67,7 @@ const parseDirectives = (params: {
6767 . replace ( / ^ \S / , ( s : string ) => s . toLowerCase ( ) ) ;
6868
6969 if ( directiveArgument ) {
70- args . push ( t . stringLiteral ( directiveArgument ) ) ;
70+ args . push ( t . stringLiteral ( directiveArgument . split ( '_' ) [ 0 ] ) ) ;
7171 }
7272
7373 const isVModels = directiveName === 'models' ;
Original file line number Diff line number Diff line change @@ -286,3 +286,48 @@ test('Named model', async () => {
286286 await wrapper . trigger ( 'click' ) ;
287287 expect ( wrapper . html ( ) ) . toBe ( '<div>2</div>' ) ;
288288} ) ;
289+
290+ test ( 'named model and underscore modifier should work in custom component' , async ( ) => {
291+ const Child = defineComponent ( {
292+ emits : [ 'update:value' ] ,
293+ props : {
294+ value : {
295+ type : Number ,
296+ default : 0 ,
297+ } ,
298+ valueModifiers : {
299+ default : ( ) => ( { double : false } ) ,
300+ } ,
301+ } ,
302+ setup ( props , { emit } ) {
303+ const handleClick = ( ) => {
304+ emit ( 'update:value' , 3 ) ;
305+ } ;
306+ return ( ) => (
307+ < div onClick = { handleClick } >
308+ { props . valueModifiers . double ? props . value * 2 : props . value }
309+ </ div >
310+ ) ;
311+ } ,
312+ } ) ;
313+
314+ const wrapper = mount (
315+ defineComponent ( {
316+ data ( ) {
317+ return {
318+ foo : 1 ,
319+ } ;
320+ } ,
321+ render ( ) {
322+ return < Child v-model :value_double = { this . foo } /> ;
323+ } ,
324+ } )
325+ ) ;
326+
327+ expect ( wrapper . html ( ) ) . toBe ( '<div>2</div>' ) ;
328+ wrapper . vm . $data . foo += 1 ;
329+ await wrapper . vm . $nextTick ( ) ;
330+ expect ( wrapper . html ( ) ) . toBe ( '<div>4</div>' ) ;
331+ await wrapper . trigger ( 'click' ) ;
332+ expect ( wrapper . html ( ) ) . toBe ( '<div>6</div>' ) ;
333+ } ) ;
You can’t perform that action at this time.
0 commit comments