@@ -36,15 +36,17 @@ function onCompositionEnd(e: Event) {
3636 }
3737}
3838
39- type ModelDirective < T > = ObjectDirective < T & { _assign : AssignerFn } >
39+ const assignKey = Symbol ( '_assign' )
40+
41+ type ModelDirective < T > = ObjectDirective < T & { [ assignKey ] : AssignerFn } >
4042
4143// We are exporting the v-model runtime directly as vnode hooks so that it can
4244// be tree-shaken in case v-model is never used.
4345export const vModelText : ModelDirective <
4446 HTMLInputElement | HTMLTextAreaElement
4547> = {
4648 created ( el , { modifiers : { lazy, trim, number } } , vnode ) {
47- el . _assign = getModelAssigner ( vnode )
49+ el [ assignKey ] = getModelAssigner ( vnode )
4850 const castToNumber =
4951 number || ( vnode . props && vnode . props . type === 'number' )
5052 addEventListener ( el , lazy ? 'change' : 'input' , e => {
@@ -56,7 +58,7 @@ export const vModelText: ModelDirective<
5658 if ( castToNumber ) {
5759 domValue = looseToNumber ( domValue )
5860 }
59- el . _assign ( domValue )
61+ el [ assignKey ] ( domValue )
6062 } )
6163 if ( trim ) {
6264 addEventListener ( el , 'change' , ( ) => {
@@ -78,7 +80,7 @@ export const vModelText: ModelDirective<
7880 el . value = value == null ? '' : value
7981 } ,
8082 beforeUpdate ( el , { value, modifiers : { lazy, trim, number } } , vnode ) {
81- el . _assign = getModelAssigner ( vnode )
83+ el [ assignKey ] = getModelAssigner ( vnode )
8284 // avoid clearing unresolved text. #2302
8385 if ( ( el as any ) . composing ) return
8486 if ( document . activeElement === el && el . type !== 'range' ) {
@@ -106,12 +108,12 @@ export const vModelCheckbox: ModelDirective<HTMLInputElement> = {
106108 // #4096 array checkboxes need to be deep traversed
107109 deep : true ,
108110 created ( el , _ , vnode ) {
109- el . _assign = getModelAssigner ( vnode )
111+ el [ assignKey ] = getModelAssigner ( vnode )
110112 addEventListener ( el , 'change' , ( ) => {
111113 const modelValue = ( el as any ) . _modelValue
112114 const elementValue = getValue ( el )
113115 const checked = el . checked
114- const assign = el . _assign
116+ const assign = el [ assignKey ]
115117 if ( isArray ( modelValue ) ) {
116118 const index = looseIndexOf ( modelValue , elementValue )
117119 const found = index !== - 1
@@ -138,7 +140,7 @@ export const vModelCheckbox: ModelDirective<HTMLInputElement> = {
138140 // set initial checked on mount to wait for true-value/false-value
139141 mounted : setChecked ,
140142 beforeUpdate ( el , binding , vnode ) {
141- el . _assign = getModelAssigner ( vnode )
143+ el [ assignKey ] = getModelAssigner ( vnode )
142144 setChecked ( el , binding , vnode )
143145 }
144146}
@@ -163,13 +165,13 @@ function setChecked(
163165export const vModelRadio : ModelDirective < HTMLInputElement > = {
164166 created ( el , { value } , vnode ) {
165167 el . checked = looseEqual ( value , vnode . props ! . value )
166- el . _assign = getModelAssigner ( vnode )
168+ el [ assignKey ] = getModelAssigner ( vnode )
167169 addEventListener ( el , 'change' , ( ) => {
168- el . _assign ( getValue ( el ) )
170+ el [ assignKey ] ( getValue ( el ) )
169171 } )
170172 } ,
171173 beforeUpdate ( el , { value, oldValue } , vnode ) {
172- el . _assign = getModelAssigner ( vnode )
174+ el [ assignKey ] = getModelAssigner ( vnode )
173175 if ( value !== oldValue ) {
174176 el . checked = looseEqual ( value , vnode . props ! . value )
175177 }
@@ -187,23 +189,23 @@ export const vModelSelect: ModelDirective<HTMLSelectElement> = {
187189 . map ( ( o : HTMLOptionElement ) =>
188190 number ? looseToNumber ( getValue ( o ) ) : getValue ( o )
189191 )
190- el . _assign (
192+ el [ assignKey ] (
191193 el . multiple
192194 ? isSetModel
193195 ? new Set ( selectedVal )
194196 : selectedVal
195197 : selectedVal [ 0 ]
196198 )
197199 } )
198- el . _assign = getModelAssigner ( vnode )
200+ el [ assignKey ] = getModelAssigner ( vnode )
199201 } ,
200202 // set value in mounted & updated because <select> relies on its children
201203 // <option>s.
202204 mounted ( el , { value } ) {
203205 setSelected ( el , value )
204206 } ,
205207 beforeUpdate ( el , _binding , vnode ) {
206- el . _assign = getModelAssigner ( vnode )
208+ el [ assignKey ] = getModelAssigner ( vnode )
207209 } ,
208210 updated ( el , { value } ) {
209211 setSelected ( el , value )
0 commit comments