Skip to content

Commit ef0668b

Browse files
authored
Add files via upload
1 parent 887a47f commit ef0668b

File tree

1 file changed

+67
-34
lines changed

1 file changed

+67
-34
lines changed

src/index.js

Lines changed: 67 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,78 @@
11
function plugin(Vue) {
2+
23
if (plugin.installed) {
34
return;
45
}
6+
var evmap = {}
57
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+
3667
Object.defineProperty(Vue.prototype, '$events', {
37-
get() {
38-
return events;
39-
}
68+
get() {
69+
return events;
70+
}
4071
});
4172
}
73+
4274
if (typeof window !== 'undefined' && window.Vue) {
43-
window.Vue.use(plugin);
75+
window.Vue.use(plugin);
4476
}
77+
4578
export default plugin;

0 commit comments

Comments
 (0)