File tree Expand file tree Collapse file tree 2 files changed +23
-2
lines changed Expand file tree Collapse file tree 2 files changed +23
-2
lines changed Original file line number Diff line number Diff line change @@ -4,14 +4,20 @@ import { remove } from 'shared/util'
44
55export default {
66 create ( _ , vnode ) {
7- registerRef ( vnode , false )
7+ registerRef ( vnode )
8+ } ,
9+ update ( oldVnode , vnode ) {
10+ if ( oldVnode . data . ref !== vnode . data . ref ) {
11+ registerRef ( oldVnode , true )
12+ registerRef ( vnode )
13+ }
814 } ,
915 destroy ( vnode ) {
1016 registerRef ( vnode , true )
1117 }
1218}
1319
14- function registerRef ( vnode : VNodeWithData , isRemoval : boolean ) {
20+ function registerRef ( vnode : VNodeWithData , isRemoval : ? boolean ) {
1521 const key = vnode . data . ref
1622 if ( ! key ) return
1723
Original file line number Diff line number Diff line change @@ -28,6 +28,21 @@ describe('ref', () => {
2828 expect ( vm . $refs . bar . $options . id ) . toBe ( 'test2' )
2929 } )
3030
31+ it ( 'should dynamically update refs' , done => {
32+ const vm = new Vue ( {
33+ data : {
34+ value : 'foo'
35+ } ,
36+ template : '<div :ref="value"></div>'
37+ } ) . $mount ( )
38+ expect ( vm . $refs . foo ) . toBe ( vm . $el )
39+ vm . value = 'bar'
40+ waitForUpdate ( ( ) => {
41+ expect ( vm . $refs . foo ) . toBeUndefined ( )
42+ expect ( vm . $refs . bar ) . toBe ( vm . $el )
43+ } ) . then ( done )
44+ } )
45+
3146 it ( 'should work as a hyperscript prop' , ( ) => {
3247 const vm = new Vue ( {
3348 components,
You can’t perform that action at this time.
0 commit comments