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'
4
4
5
5
export default {
6
6
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
+ }
8
14
} ,
9
15
destroy ( vnode ) {
10
16
registerRef ( vnode , true )
11
17
}
12
18
}
13
19
14
- function registerRef ( vnode : VNodeWithData , isRemoval : boolean ) {
20
+ function registerRef ( vnode : VNodeWithData , isRemoval : ? boolean ) {
15
21
const key = vnode . data . ref
16
22
if ( ! key ) return
17
23
Original file line number Diff line number Diff line change @@ -28,6 +28,21 @@ describe('ref', () => {
28
28
expect ( vm . $refs . bar . $options . id ) . toBe ( 'test2' )
29
29
} )
30
30
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
+
31
46
it ( 'should work as a hyperscript prop' , ( ) => {
32
47
const vm = new Vue ( {
33
48
components,
You can’t perform that action at this time.
0 commit comments