File tree Expand file tree Collapse file tree 1 file changed +67
-34
lines changed Expand file tree Collapse file tree 1 file changed +67
-34
lines changed Original file line number Diff line number Diff line change 1
1
function plugin ( Vue ) {
2
+
2
3
if ( plugin . installed ) {
3
4
return ;
4
5
}
6
+ var evmap = { }
5
7
const events = new Vue ( {
6
- methods : {
7
- fire ( name , data = null ) {
8
- this . emit ( name , data )
9
- } ,
10
- emit ( name , data = null ) {
11
- this . $emit ( name , data )
12
- } ,
13
- listen ( name , cb ) {
14
- this . on ( name , cb )
15
- } ,
16
- listenOnce ( name , cb ) {
17
- this . once ( name , cb )
18
- } ,
19
- on ( name , cb ) {
20
- this . $on ( name , cb )
21
- } ,
22
- once ( name , cb ) {
23
- this . $once ( name , cb )
24
- } ,
25
- off ( name , cb ) {
26
- this . $off ( name , cb )
27
- } ,
28
- unlisten ( name , cb ) {
29
- this . off ( name , cb )
30
- } ,
31
- removeAll ( ) {
32
- this . $off ( )
33
- }
34
- }
35
- } ) ;
8
+ methods : {
9
+ fire ( name , data = null ) {
10
+ this . emit ( name , data )
11
+ } ,
12
+ emit ( name , data = null ) {
13
+ this . $emit ( name , data )
14
+ } ,
15
+ listen ( name , cb ) {
16
+ this . on ( name , cb )
17
+ } ,
18
+ listenOnce ( name , cb ) {
19
+ this . once ( name , cb )
20
+ } ,
21
+ on ( name , cb ) {
22
+ evmap [ name ] = cb
23
+ this . $on ( name , cb )
24
+ } ,
25
+ once ( name , cb ) {
26
+ evmap [ name ] = cb
27
+ this . $once ( name , cb )
28
+ } ,
29
+ off ( name , cb ) {
30
+ if ( ! cb ) {
31
+ cb = evmap [ name ]
32
+ }
33
+ this . $off ( name , cb )
34
+ } ,
35
+ unlisten ( name , cb ) {
36
+ this . off ( name , cb )
37
+ } ,
38
+ removeAll ( ) {
39
+ this . $off ( )
40
+ }
41
+ }
42
+ } )
43
+
44
+ Vue . mixin ( {
45
+ beforeCreate ( ) {
46
+ if ( typeof this . $options . events !== 'object' ) return
47
+ var eventMap = { }
48
+ for ( var key in this . $options . events ) {
49
+ eventMap [ key ] = this . $options . events [ key ] . bind ( this )
50
+ }
51
+ this . $once ( 'hook:beforeMount' , ( ) => {
52
+ for ( var key in eventMap ) {
53
+ events . $on ( key , eventMap [ key ] )
54
+ }
55
+ } )
56
+ this . $once ( 'hook:beforeDestroy' , ( ) => {
57
+ for ( var key in eventMap ) {
58
+ events . $off ( key , eventMap [ key ] )
59
+ }
60
+ eventMap = null
61
+ } )
62
+ }
63
+ } )
64
+
65
+ Vue . events = events
66
+
36
67
Object . defineProperty ( Vue . prototype , '$events' , {
37
- get ( ) {
38
- return events ;
39
- }
68
+ get ( ) {
69
+ return events ;
70
+ }
40
71
} ) ;
41
72
}
73
+
42
74
if ( typeof window !== 'undefined' && window . Vue ) {
43
- window . Vue . use ( plugin ) ;
75
+ window . Vue . use ( plugin ) ;
44
76
}
77
+
45
78
export default plugin ;
You can’t perform that action at this time.
0 commit comments